токен доступа к facebook истек

На основании инструкций facebook (сценарий 4) я используя следующий URL

https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=CLIENT_SECRET& grant_type=fb_exchange_token&fb_exchange_token=OLD_ACCESS_TOKEN

чтобы получить новый токен доступа, но я получаю следующее:

{"error": {"message": "Ошибка проверки токена доступа: срок действия сеанса истек во время unix 1365257820. Текущее время unix - 1365759029.", "type": "OAuthException", "code": 190, "error_subcode" : 463}}

не работает. Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Понятно! Работает так

если токен доступа истекает, сначала запустите приведенный ниже скрипт php в браузере после того, как вы сохраните его на своем сервере

<?php
  $app_id = "your app id";
  $app_secret = "your app secret"; 
  $my_url = "http://apps.facebook.com/your_app_name";

  // known valid access token stored in a database 
  $access_token = "your old 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)) {
    $token_url="https://graph.facebook.com/oauth/access_token?client_id="
      . $app_id . "&redirect_uri=" . urlencode($my_url) 
      . "&client_secret=" . $app_secret 
      . "&code=" . $code . "&display=popup";
    $response = file_get_contents($token_url);
    $params = null;
    parse_str($response, $params);
    $access_token = $params['access_token'];
  }


  // Attempt to query the graph:
  $graph_url = "https://graph.facebook.com/me?"
    . "access_token=" . $access_token;
  $response = curl_get_file_contents($graph_url);
  $decoded_response = json_decode($response);

  //Check for errors 
  if ($decoded_response->error) {
  // check to see if this is an oAuth error:
    if ($decoded_response->error->type== "OAuthException") {
      // Retrieving a valid access token. 
      $dialog_url= "https://www.facebook.com/dialog/oauth?"
        . "client_id=" . $app_id 
        . "&redirect_uri=" . urlencode($my_url);
      echo("<script> top.location.href='" . $dialog_url 
      . "'</script>");
    }
    else {
      echo "other error has happened";
    }
  } 
  else {
  // success
    echo("success" . $decoded_response->name);
    echo($access_token);
  }

  // note this wrapper function exists in order to circumvent PHP’s 
  //strict obeying of HTTP error codes.  In this case, Facebook 
  //returns error code 400 which PHP obeys and wipes out 
  //the response.
  function curl_get_file_contents($URL) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_URL, $URL);
    $contents = curl_exec($c);
    $err  = curl_getinfo($c,CURLINFO_HTTP_CODE);
    curl_close($c);
    if ($contents) return $contents;
    else return FALSE;
  }
?>

приведенный выше сценарий предоставит вам URL-адрес, подобный указанному ниже в браузере

https://graph.facebook.com/oauth/access_token?code=

затем получите строку (она должна быть примерно такой: AQCn41Svv5DbWrnFY0Wf ..... YbNm_yz2rE # _) после code = и вставьте ее в URL code = ниже и ЗАПУСТИТЕ указанный ниже URL в браузере.

https://graph.facebook.com/oauth/access_token?client_id=App_Id&redirect_uri=http://apps.facebook.com/poemsoflove&client_secret=App_Secret&code=AQCn41Svv5DbWrnFY0Wf_.....YbN а>

вы получите следующий ответ, который представляет собой новый токен доступа на 60 дней

access_token=<Extended_Access_Token>&expires=5180130

скопируйте и вставьте строку после access_token = в скрипт на вашем сервере, который публикует новые сообщения на вашей странице


person stefanosn    schedule 12.04.2013    source источник
comment
Это означает, что срок действия вашего старого токена доступа уже истек. Не могли бы вы повторить то же самое с новым короткоживущим токеном доступа?   -  person Anvesh Saxena    schedule 12.04.2013
comment
спасибо, я сделал это с новым короткоживущим токеном доступа   -  person stefanosn    schedule 12.04.2013
comment
Вы только что написали токен доступа к миру, будьте осторожны с этим. Кто угодно может использовать это неправильно.   -  person Anvesh Saxena    schedule 12.04.2013


Ответы (2)


  1. Создание приложения Страница разработчика Facebook

После того, как с php можно получить доступ к току в реальном времени

$app_id = '{Application Id}';
$app_secret = '{Application Secret}';
$access_token = "https://graph.facebook.com/oauth/access_token?client_id=$app_id&client_secret=$app_secret&grant_type=client_credentials";
$access_token = file_get_contents($access_token); // returns 'accesstoken=APP_TOKEN|APP_SECRET'
$access_token = str_replace('access_token=', '', $access_token);
person Ramin Darvishov    schedule 13.08.2016

person    schedule
comment
Пожалуйста, не публикуйте код в качестве ответа. Пожалуйста, объясните свою логику. - person Harsh Wardhan; 21.07.2017