2010-06-30 72 views
4

這裏是試圖建立一個新的 活動時,我不斷收到迴應:未知授權頭錯誤 - 使用Zend的OAuth

{"error":{"errors":[{"message":"Unknown authorization 
header","locationType":"header","location":"Authorization"}],"code": 
401,"message":"Unknown authorization header"}} 

這是我送(調試)要求:

POST /buzz/v1/activities/@me/@self?alt=json HTTP/1.1 
Host: www.googleapis.com 
Connection: close 
Accept-encoding: gzip, deflate 
User-Agent: Zend_Http_Client 
Content-Type: application/json 
Authorization: OAuth 
realm="",oauth_consumer_key="eawp.com",oauth_nonce="ce29b04ce6648fbb92efc8f08c1c0091",oauth_signature_method="HMAC- 
SHA1",oauth_timestamp="1277934794",oauth_version="1.0",oauth_token="1%2FcBzo5ckGvCAm3wLWh1SDH3xQNoW-- 
yek1NVfUa1Qqns",oauth_signature="CUezSiMbvxyN1BTeb3uROlIx8gA%3D" 
Content-Length: 86 

{"data":{"object":{"type":"note","content":"Using OAuth with Twitter - 
PHP Example"}}} 

獲得access_token的所有其他請求都正常工作,但現在我不太確定它爲什麼不起作用。

**更新

爲了幫助調試多一點,這裏是有問題的代碼:

$config = array( 
    //'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 
    //'version' => '1.0', 
    //'signatureMethod' => 'HMAC-SHA1', 
    'callbackUrl' => $callback, 
    'siteUrl' => $url, 
    'consumerKey' => $consumerKey, 
    'consumerSecret' => $consumerPass 
); 
$statusMessage = $title; 
$token = unserialize($accessToken); 
$client = $token->getHttpClient($config); 
$client->setUri('https://www.googleapis.com/buzz/v1/activities/@me/ 
@self?alt=json'); 
$client->setMethod(Zend_Http_Client::POST); 
$client->setEncType(Zend_Http_Client::ENC_FORMDATA); 
$client->setHeaders('Content-Type: application/json'); 
           $data = array( 
             'data' => array( 
               'object' => array( 
                 'type'  => 'note', 
                 'content' => $statusMessage, 
               ), 
             ), 
           ); 
           $dataXml = "<entry xmlns='http://www.w3.org/2005/Atom' 
xmlns:activity='http://activitystrea.ms/spec/1.0'> 
                       <activity:object> 
                        <activity:object-type>http://activitystrea.ms/schema/1.0/ 
note</activity:object-type> 
                        <content type='html'>$statusMessage<content> 
                        </activity:object> 
                       </entry>"; 
//$client->setRawData($dataXml); 
$client->setRawData(Zend_Json::encode($data)); 
//$client->setParameterPost("content", $statusMessage); 
$response = $client->request(); 

**正如你所看到的,我做了一些測試,同時與xml + atom和json請求 - 兩者都不算太好。

你能在那裏看到明顯的錯誤嗎?還有一個提醒我上午使用Zend_Oauth的時候我 。

回答

1

我有一些問題

使用選項:
'requestScheme'=> Zend_Oauth :: REQUEST_SCHEME_QUERYSTRING
在$配置陣列

在此之後改變我的問題解決了

PS更多代碼:


$OAuthConfiguration = array(
    'version' => '1.0', 
    'requestScheme' => Zend_Oauth::REQUEST_SCHEME_QUERYSTRING, 
    'signatureMethod' => 'HMAC-SHA1', 
    'callbackUrl'=>'####', 
    'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken', 
    'authorizeUrl' => 'https://www.google.com/buzz/api/auth/OAuthAuthorizeToken', 
    'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken', 
    'consumerKey' => '####', 
    'consumerSecret' => '####', 
); 
$OAuthConsumer = new Zend_Oauth_Consumer($OAuthConfiguration); 

//authorizeOAuth 
$params = array(
    'domain'=>'####', 
    'scope'=>'https://www.googleapis.com/auth/buzz' 
); 
$token = $OAuthConsumer->getRequestToken($params); 

$_SESSION['token']['buzz'] = serialize($token); 

$OAuthConsumer->redirect($params); 

//callbackOAuth 
if (!empty($_GET) && isset($_SESSION['token']['buzz'])) { 
    $token = $consumer->getAccessToken(
     $_GET, 
     unserialize($_SESSION['token']['buzz']) 
    ); 
    unset($_SESSION['token']); 
    return serialize($token); 
} else { 
    return false; 
} 
+0

明天我會給你一個鏡頭,讓你知道它是否有效。 – xil3 2010-10-04 15:47:15