尝试将我的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,我就不应该需要它了?
我已经检查了所有变量,即$credentials和$this->_c,并且所有变量都正确传递。
发布于 2012-04-13 09:11:37
这实际上是oauth-php库中的一个bug。该库错误地处理以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());
}你应该都准备好了。如果您有任何进一步的问题,请毫不犹豫地联系我们的developer forums,我自己或团队中的其他人都会很乐意帮助您。
享受吧!
-Jeremy
https://stackoverflow.com/questions/10123254
复制相似问题