谷歌API 2支持Oauth:“令牌无效 - 无效的AuthSub令牌。”

时间:2011-09-29 13:47:56

标签: php oauth 2-legged

我的代码基于http://gdatatips.blogspot.com/2008/11/2-legged-oauth-in-php.html

这是我的代码,我想使用Google Doc(文档列表)API:

        $endpoint = 'https://www.google.com/accounts/OAuthGetRequestToken';
        $consumer = new OAuthConsumer(GOOGLE_API_DOCLIST_CONSUMER_KEY, GOOGLE_API_DOCLIST_CONSUMER_SECRET, NULL);

        $arrParams = array(
                    'scope' => 'https://docs.google.com/feeds/'
                    ,'xoauth_requestor_id' => GOOGLE_API_DOCLIST_USER_EMAIL
                    );
        $req = OAuthRequest::from_consumer_and_token($consumer, NULL, "GET", $endpoint, $arrParams);
        $req->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);


        $curl = new Auth_Curl();
        $content = $curl->request($req->to_url());


        $docAPI = new GoogleAPI_DocumentList(new Auth_Curl(), $req->to_header());

        var_dump($req->to_header());
        echo '<br />-- Getting Collections list';

        $url = 'https://docs.google.com/feeds/default/private/full/-/folder' . '?xoauth_requestor_id=' . GOOGLE_API_DOCLIST_USER_EMAIL;
        $raw = $docAPI->getCollectionList($url);
        var_dump($raw);
        die();

我经常得到:

  

令牌无效 - 无效的AuthSub令牌。

我做错了什么?

编辑: 这里有一些“提示”:

  • 他们似乎混合了API端点和基本Feed。我已将OAuthGetRequestToken用于端点。它似乎产生了有效的回应。
  • 我保留了它,但我不确定是否需要xoauth_requestor_id。
  • 文档告诉我们使用空格来分隔Authorization标头中的参数。图书馆使用逗号。

1 个答案:

答案 0 :(得分:1)

以下是更正后的代码:

    $endpoint = 'https://docs.google.com/feeds/default/private/full/-/folder';
    $consumer = new OAuthConsumer(GOOGLE_API_DOCLIST_CONSUMER_KEY, GOOGLE_API_DOCLIST_CONSUMER_SECRET, NULL);

    $arrParams = array(
                'xoauth_requestor_id' => GOOGLE_API_DOCLIST_USER_EMAIL
                );
    $req = OAuthRequest::from_consumer_and_token($consumer, NULL, "GET", $endpoint, $arrParams);
    $req->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);

    $docAPI = new GoogleAPI_DocumentList(new Auth_Curl(), $req->to_header());

    var_dump($req->to_header());
    echo '<br />-- Getting Collections list';

    $url = 'https://docs.google.com/feeds/default/private/full/-/folder' . '?xoauth_requestor_id=' . GOOGLE_API_DOCLIST_USER_EMAIL;
    $raw = $docAPI->getCollectionList($url);
    var_dump($raw);
    die();
  • API和EndPoint没有混合。在OAuth v1.0上,您不要求服务器生成要在授权标头中使用的标记,授权标头在本地100%生成。 (我认为在某些时候使用URL来呈现授权标题)
  • 由于您没有生成access_token,因此无需定义范围。
  • 确保您拥有一个商家帐户
    • 只有商家帐户才允许您激活双方式身份验证。