【发布时间】:2012-04-24 15:06:38
【问题描述】:
我尝试从服务器端请求获取 60 天的 facebook 访问令牌。用户登录后,我通过 Facebook SDK 中的 getAccessToken() 函数检查访问令牌,然后使用我在这里某处找到的 getExtendedAccessToken():How to extend access token validity since offline_access deprecation 要求 60 天访问令牌:
public function getExtendedAccessToken() {
try {
// need to circumvent json_decode by calling _oauthRequest
// directly, since response isn't JSON format.
$access_token_response =
$this->_oauthRequest(
$this->getUrl('graph', '/oauth/access_token'),
$params = array( 'client_id' => $this->getAppId(),
'client_secret' => $this->getApiSecret(),
'grant_type'=>'fb_exchange_token',
'fb_exchange_token'=>$this->getAccessToken(),
));
} catch (FacebookApiException $e) {
// most likely that user very recently revoked authorization.
// In any event, we don't have an access token, so say so.
return false;
}
if (empty($access_token_response)) {
return false;
}
$response_params = array();
parse_str($access_token_response, $response_params);
if (!isset($response_params['access_token'])) {
return false;
}
return $response_params['access_token'];
}
不幸的是,它仍然无法工作我的访问令牌在 2 小时后过期,所以我也尝试了这个:
public function getSimpleExtendedAccessToken(){
$request = 'https://graph.facebook.com/oauth/access_token?
client_id='. $this->getAppId().
'&client_secret=' .$this->getApiSecret().
'&grant_type=fb_exchange_token
&fb_exchange_token=' .$this->getAccessToken();
$response = file_get_contents($request);
$params = null;
parse_str($response, $params);
return $params['access_token'];
}
而且这个也在 2 小时后过期。但是,当我在第二个函数中检查数组 $params 中的内容时,上面写着:
数组([access_token] => AAAFM5sO7[...] [expires] => 4897)
(那部分:“AAAFM5sO7[...]”当然是我的访问令牌号)
我收到的所有访问令牌都是相同的:第一个来自getAccessToken(),第二个来自getExtendedAccessToken(),第三个来自getSimpleExtendedAccessToken()。
当然,当我越来越多地要求扩展访问令牌时,到期号不会更新,但它会倒计时,从 Facebook 文档的角度来看,这是正确的,因为你不能要求新的每分钟访问令牌,但为什么我无法获得 60 天的访问令牌?
谁能帮帮我,因为我有点困惑?
【问题讨论】:
-
在
try/catch块中发现错误可能是值得的,因为这可能是关键。将其保存到文本文件;我相信 Facebook 样本让你只需简单地做error_log($e)。 -
我不这么认为,因为我从第一个函数
getExtendedAccessToken()收到了一个访问令牌,而不是像try/cach的错误部分所示的那样为假。第二个函数getSimplyExtendedAccessToken()也给了我有效的访问令牌 - 而第二个函数没有try/cach部分。 -
...所以没人知道怎么解决这个问题??
-
耶稣,给它一天以上的时间!
标签: php facebook oauth-2.0 access-token