обновление Facebook access token для серверной части (в facebook-php SDK)?


Я использую Facebook PHP SDK для вызова соответствующих API для публикации и получения данных. В настоящее время я сохраняю маркер доступа пользователя в базе данных, но он истекает через 60 дней. Как обновить маркер доступа пользователя?

1 . Когда мне нужно обновить маркеры доступа? После того, как он истечет, или раньше?

2 . Как лучше всего обновить маркеры доступа?

3 . Должны ли мои пользователи снова войти в систему, чтобы обновить маркер доступа?

Это функция, которую я использую для расширения маркер доступа. но истекающее время остается прежним.

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;

    }
3 8

3 ответа:

access token не может быть обновлен просто так, пользователь должен получить доступ к приложению снова, чтобы получить новый маркер.

Вы можете обновить маркер в любое время, когда захотите. На самом деле, лучше всего обновлять маркер каждый раз, когда пользователь посещает ваше приложение. Таким образом, срок действия токена никогда не истечет, если пользователь продолжает посещать приложение один раз в 60 дней.

Попробуйте это:

$app_id = FB_APP_ID;
$app_secret = FB_SECRET_ID;
$canvas_URL = FB_PAGE_URL;
$code = $_REQUEST["code"];

if(empty($code)) {
  $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
  $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . $canvas_URL . "&state="
    . $_SESSION['state'];

  echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state']) {
$facebook->api('oauth/access_token', array(
    'client_id'     => FB_APP_ID,
    'client_secret' => FB_SECRET_ID,
    'type'          => 'client_cred',
    'code'          => $code,
));
$token = $facebook->getAccessToken();
echo$token;
}

Публичная функция 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;

}