1

コードはhttp://gdatatips.blogspot.com/2008/11/2-legged-oauth-in-php.htmlに基づいています。

これが私のコードです。GoogleDoc(ドキュメントリスト)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が必要かどうかわかりません。
  • ドキュメントには、Authorizationヘッダーのパラメーターを区切るためにスペースを使用するように指示されています。ライブラリはコンマを使用します。
4

1 に答える 1

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 を生成しないため、スコープを定義する必要はありません。
  • ビジネスアカウントを持っていることを確認してください
    • 2段階認証を有効にできるのはビジネスアカウントのみです。
于 2011-09-30T17:55:28.863 に答える