получить новый недолговечный пользовательский access_token

Мне нужно обновить долгоживущий токен доступа. Я прочитал тему Обновить долгоживущий токен доступа на стороне сервера и написал код следующим образом:

<?php

$code = $_REQUEST["code"];

if(empty($code)) {

  $dialog_url = "https://www.facebook.com/dialog/oauth?"
    . "client_id=$app_id"
    . "&redirect_uri=$my_url"
    . "&scope=..."
    ;

  echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
else
{
  $response = file_get_contents("https://graph.facebook.com/oauth/access_token?"
    . "client_id=$app_id"
    . "&redirect_uri=$my_url"
    . "&client_secret=$app_secret"
    . "&code=$code"
    );

  $params = null;
  parse_str($response, $params);
  $access_token=$params['access_token'];

  $response = file_get_contents("https://graph.facebook.com/oauth/access_token?"
    . "client_id=$app_id"
    . "&client_secret=$app_secret"
    . "&redirect_uri=$my_url"
    . "&grant_type=fb_exchange_token"
    . "&fb_exchange_token=$access_token"
    );
}

?>

При первом вызове он получает 60-дневный токен доступа. Я ожидаю, что при следующих вызовах он получит еще один (может быть, с тем же именем) 60-дневный токен, и я увижу в отладчике https://developers.facebook.com/tools/debug, время выдачи и время истечения которого меняются, но время не меняется. Что не так с моим сценарием?


person Maksim Aniskov    schedule 12.12.2012    source источник


Ответы (1)


Вы сравнивали токены между собой? Facebook вернет вам существующий токен доступа, если тот же звонок будет совершен менее чем за 24 часа. Кроме того, срок действия токенов не истекает, если вы также запросили токены страницы для пользователя. См. мой ответ здесь: Токены доступа к странице Facebook. Срок их действия истекает? для получения дополнительной информации по этому вопросу.

Один из способов, с помощью которого вы можете быть уверены, что каждый раз получаете новый токен, заключается в том, что вы отзываете доступ, выполняя http-вызов DELETE для /PROFILE_ID/permissions, а затем запрашивая новый токен. Единственная плохая вещь в этом заключается в том, что вам потребуется снова ввести пользователя в диалоговое окно oAuth.

person rvaldron    schedule 29.01.2013