0

サーバー側のリクエストから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日間のアクセストークンを取得できないのですか?

私は少し混乱しているので、誰かが私を助けることができますか?

4

1 に答える 1

1

私自身の質問に対する部分的な答えがあります。私は自分の拡張アクセストークンを受け取ろうとしたので(そして私はアプリの所有者です)、Facebookは私に拡張トークンを与えませんでしたが、他の人と一緒に試したとき、私は通常の60日間のアクセストークンを受け取ります。

于 2012-05-05T10:31:01.540 に答える