2011-09-29 233 views
1

我的代碼是http://gdatatips.blogspot.com/2008/11/2-legged-oauth-in-php.htmlGoogle API 2 lega Oauth:「令牌無效 - AuthSub令牌無效。」

這裏是我的代碼,我想與谷歌文檔(文檔列表)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端點和基礎飼料。我已經爲端點添加了OAuthGetRequestToken。它似乎產生了一個有效的迴應。
  • 我保留了它,但我不確定是否需要xoauth_requestor_id。
  • 該文檔告訴我們使用空間來分隔授權標題中的參數。圖書館使用逗號。

回答

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,因此不需要定義範圍。
  • 確保你有一個企業帳戶
    • 只有企業帳戶允許你激活雙腿認證。