2012-04-12 11 views
1

は、いくつかの問題RESTのOauthトークンのための私のJSAPIトークンを交換しようとしている(https://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokensLinkedInののOAuth問題 - oauth_verifier

私はこのライブラリを使用しています持って - 私は、インストールすることができませんでしだとして、PECL拡張モジュールとは対照的に - http://code.google.com/p/oauth-php/をサーバー上の拡張機能。

似たような質問がたくさんあるようですが、実際に質問に答えるものはありません。上記のライブラリを使用して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に合格していたのであれば、私はそれを必要としないはずです。

私はすべての変数I.Eをチェックしました。 $ credentialsと$ this - > _ cそしてすべての変数が正しく渡されています。

答えて

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)) 
とそれを変更をする:

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

} 

そして、あなた:その後

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

、あなたがする必要があるのは、以下である、あなたはすでにやっていたものと本質的に同じですすべて設定する必要があります。それ以上の問題がある場合は、developer forumsにお気軽にお問い合わせください。自分自身か、チームの誰かがお手伝いします。

お楽しみください!

-Jeremy

+1

私も同様にパッケージのメンテナに[バグ](http://code.google.com/p/oauth-php/issues/detail?id=124)を提出しました。 –

+0

うわー。 Jeremyさん、ありがとうございました。 –

+0

私の喜び!私の経験をしてもそのことを追うためにしばらく時間をとったので、他の人が引き起こした不満を想像することができます。 –

関連する問題