在尝试为REST Oauth Tokens交换我的JSAPI令牌时遇到一些问题(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,我不应该需要它吗?
我检查了所有变量I.E. $ credentials和$ this-> _c以及所有变量正确传递。
答案 0 :(得分: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());
}
你应该全力以赴。如果您还有其他任何问题,请随时联系我们developer forums,我或自己或团队中的其他人都乐意为您提供帮助。
享受!
-Jeremy