简体   繁体   中英

Unknown authorization header error with Buzz API - Using Zend OAuth

Here's the response I keep getting when trying to create a new activity:

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

Here's the request I sent (for debugging):

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"}}}

All the other requests to get the access_token worked just fine, but now I'm not too sure why it's not working.

** Update

To assist with the debugging a bit more, here is the code in question:

$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(); 

** As you can see, I did a bit of testing with both the xml+atom and json requests - not much luck with either.

Can you see anything clearly wrong there? And another reminder that I am using Zend_Oauth.

I have some problem

Use option:
'requestScheme' => Zend_Oauth::REQUEST_SCHEME_QUERYSTRING
in your $config array

After this change my problem was solved

PS More code:


$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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM