サーバー側のリクエストから60日間のFacebookアクセストークンを取得しようとしています。ユーザーがログインした後、Facebook SDKのgetAccessToken()関数を使用してアクセストークンを確認し、その後、ここで見つけたgetExtendedAccessToken()を使用します。offline_accessの非推奨以降、アクセストークンの有効性を拡張して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
、2番目の関数で配列内にあるものを確認すると、次のように記述されていました。
配列([access_token] => AAAFM5sO7 [...] [expires] => 4897)
(その部分: " AAAFM5sO7[...]
"はもちろん私のアクセストークン番号です)
私が受け取ったすべてのアクセストークンは同じです。最初のトークンはからgetAccessToken()
、2番目のトークンはからgetExtendedAccessToken()
、3番目のトークンはからgetSimpleExtendedAccessToken()
です。
もちろん、拡張アクセストークンをさらに追加で要求すると、有効期限番号は更新されませんが、カウントダウンされます。これは、Facebookドキュメントの観点からは正しいです。これは、それぞれ新しいアクセストークンを要求できないためです。分ですが、なぜ60日間のアクセストークンを取得できないのですか?
私は少し混乱しているので、誰かが私を助けることができますか?