1

JSAPI トークンを REST Oauth トークンに交換しようとすると問題が発生します ( https://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens )

私はこのライブラリを使用しています - http://code.google.com/p/oauth-php/ - サーバーに拡張機能をインストールできないため、PECL 拡張機能とは対照的です。

同様の質問がたくさんあるようですが、実際に質問に答えるものはありません-上記のライブラリを使用してLinkedinで認証する方法。

私のコードは次のとおりです。

    $cookie_name        = "linkedin_oauth_" . $this->_c->linkedin_api_key;
    $credentials_json   = stripslashes($_COOKIE[$cookie_name]);
    $credentials        = json_decode($credentials_json);

    // Get the Access Token + Secret
    $access_token_url = 'https://api.linkedin.com/uas/oauth/accessToken';

    OAuthStore::instance("2Leg", array(
        'consumer_key'      => $this->_c->linkedin_api_key,
        'consumer_secret'   => $this->_c->linkedin_api_secret
    ));

    try {

        $request = new OAuthRequester($access_token_url, 'POST', array(
            'xoauth_oauth2_access_token' => $credentials->access_token
        ));

        $result = $request->doRequest();

    } catch(OAuthException2 $e) {

        print_r($e->getMessage());

    }

catch ステートメントの出力は次のとおりです。

Request failed with code 400: oauth_problem=parameter_absent&oauth_parameters_absent=oauth_verifier

この oauth_verifier を取得するにはどうすればよいですか? xoauth_oauth2_access_token を既に渡していた場合、それは必要ないというのが私の理解でしたか?

すべての変数 IE $credentials と $this->_c を確認しましたが、すべての変数が正しく通過しています。

4

1 に答える 1

2

これは実際には oauth-php ライブラリのバグです。ライブラリは、xoauth_* で始まるパラメーターを誤って処理し、oauth_* パラメーターを処理するのと同じ方法で処理しています。これは OAuth 仕様に違反しており、他のほとんど (すべて?) の OAuth ライブラリにはこの問題はありません。修正は、次のことを行うことです。

ファイル OAuthRequestSigner.php 内で、次を見つけます。

1) getAuthorizationHeader 関数内で、次の行を見つけます。

if (strncmp($name, 'oauth_', 6) == 0 || strncmp($name, 'xoauth_', 7) == 0)

次のように変更します。

if (strncmp($name, 'oauth_', 6) == 0)

2) 関数 getQueryString 内で、次の行を見つけます。

||  (strncmp($name, 'oauth_', 6) != 0 && strncmp($name, 'xoauth_', 7) != 0))

次のように変更します。

||  (strncmp($name, 'oauth_', 6) != 0)

その後、行う必要があるのは、基本的には既に行っていたものと同じで、次のとおりです。

try {

    $request = new OAuthRequester($access_token_url, "POST", array('xoauth_oauth2_access_token' => $access_token));

    $result = $request->doRequest();

    var_dump($result);

} catch(OAuthException2 $e) {

    print_r($e->getMessage());

}

そして、あなたはすべて準備ができているはずです。さらに問題が発生した場合は、開発者フォーラムまでお気軽にお問い合わせください。私またはチームの他のメンバーが喜んでお手伝いいたします。

楽しみ!

-ジェレミー

于 2012-04-13T01:11:37.303 に答える