2

したがって、期限切れのアクセストークンでエラーをキャッチしたい場合は、これをチェックする必要があり ます https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens / そしてわかりましたが、少し不明確です。

  // known valid access token stored in a database 
  $access_token = "YOUR_STORED_ACCESS_TOKEN";

だから私は自分のデータベースに最後のユーザーのアクセストークンを保持する必要がありますか?

  $code = $_REQUEST["code"];

  // If we get a code, it means that we have re-authed the user 
  //and can get a valid access_token. 
  if (isset($code)) {

それで、私が$_REQUEST["code"]それを取得した場合、ユーザーはアクセストークンを持っていることを意味しますか?

私のアプリはユーザーの好みを印刷します。たとえば、ユーザーがパスワードを変更した場合、新しいアクセストークンを取得する必要があります。これらのトークンを有効にするにはどうすればよいですか? この場合、Facebookのドキュメントは私にとって本当に不明確です;/

4

1 に答える 1

1

例外処理を介してそれを行うことができます。アクセス トークンの有効期限が切れているか無効な場合、エラーが発生し、以下のメッセージが表示されます。

public function getUserInfo($access_token)
    {    
               try {
                        $user_info = $this->facebook->api(
                       '/me',
                       'GET',
                               array('access_token' =>$access_token)
                    );
                    } 
                    catch(Exception $e){
                        $message = $e->getMessage();
                            if ((strpos($message, 'Error validating access token') !== false) ||
                                (strpos($message, 'Invalid OAuth access token') !== false) ||
                                (strpos($message, 'An active access token must be used') !== false)
                            ) {
                                echo 'Your custom Message';
                            }
                    }
}

アクセストークンを関数に渡すことができ、上記の例外処理のようにチェックします。

お役に立てば幸いです。

このようにして、拡張アクセストークンを取得できます

 /**
     * Getting User Acess Tocken , extended it and save it in to database......
     */
    public function getAccessToken($user_id,$fb_account_id)
    {
         $access_token=$this->facebook->getAccessToken();               
         $extended_access_token=$this->getExtendedAccessToken($access_token);                
        /** 
         * To save Access tocken and other necessary option
         */  
        $usr_bus_model = new Application_Model_UserBusinessAccounts;                
        $usr_bus_model->loadAccount($user_id,'Facebook',(int)$fb_account_id,false);         
        $usr_bus_model->details=$extended_access_token;
                if(!empty($extended_access_token))
                {
                    $usr_bus_model->status= 'active';
                }
        $usr_bus_model->save();

        return $extended_access_token;
    }

    public function getExtendedAccessToken($access_token)
        {       

            $token_url="https://graph.facebook.com/oauth/access_token";
            $params=array('client_id'=>self :: appId,'client_secret'=>self :: appSecretId,'grant_type'=>'fb_exchange_token','fb_exchange_token'=>$access_token);

              $response = $this->curl($token_url,$params);
              $response = explode ('=',$response);
              $response = explode ('&',$response[1]);
              $response = $response[0];       
              return $response;

        }

上記の2つの機能を作成しました。したがって、アクセストークンを使用する必要があるときはいつでも、拡張アクセストークンも呼び出して、これをデータベースに保存してください。そのため、アクセス トークンの有効期限が切れることはありません。

于 2013-03-16T11:31:26.183 に答える