Токен расширенного доступа из Facebook не работает должным образом - PullRequest
7 голосов
/ 21 марта 2012

У меня проблемы, так как Facebook удалил разрешение offline_access.

Попробовал 2 вещи:

  1. Я звоню, как предложено Facebook.

    https://graph.facebook.com/oauth/access_token?             
        client_id=APP_ID&
        client_secret=APP_SECRET&
        grant_type=fb_exchange_token&
        fb_exchange_token=EXISTING_ACCESS_TOKEN 
    
  2. Я также попробовал Android SDK, который использует намерение получить токен расширенного доступа:

    intent.setClassName("com.facebook.katana", "com.facebook.katana.platform.TokenRefreshService");
    

В developers.facebook.com Я установил для своего приложения «Native / Desktop».

Я также отключил offline_access в настройках приложения.

Я удалил старые разрешения из своей учетной записи Facebook, прежде чем пытаться.

Оба метода дают мне токены на 24 часа.Может быть, кто-нибудь может помочь мне сделать правильный звонок для получения токена на 60 дней?

Я видел довольно много сообщений об ошибках по этой проблеме, но также и о том, что они были решены.Похоже, не в моем случае.

Ответы [ 3 ]

1 голос
/ 11 июля 2012

используйте следующую функцию для получения маркера расширенного доступа: открытая функция 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'];

}

0 голосов
/ 28 мая 2012

Предполагая, что вы используете SDK Facebook, он уже имеет встроенный метод для именно этого.

facebook.extendAccessTokenIfNeeded(this, null);

это контекст, а null - serviceListener.

Вы можете использовать extendAccessToken также, тот же основной

0 голосов
/ 28 мая 2012

Проверяли ли вы, чтобы токен длился более 24 часов? Согласно документации, в некоторых случаях обновляется только время истечения, а токен остается прежним:

Возвращенный access_token будет иметь новый долгоживущий срок действия, однако, сам access_token может совпадать или не совпадать с ранее предоставленным долгоживущим access_token.

...