Как получить токен доступа к странице, который не истекает?

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

Теперь я получаю токен доступа с помощью:

https://graph.facebook.com/me/accounts

У меня есть разрешение publish_stream и manage_pages, но с помощью Access Token Debugger я вижу, что токен истекает примерно через 1 час. Есть ли способ никогда не истекать?

Ответ 1

Смотрите разработчики facebook:

Используя долгоживущий токен доступа пользователя, запрос [Пользователь ID]/accounts теперь будут предоставлять токены доступа к страницам, которые не expire для страниц, которыми управляет пользователь.

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

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 

И затем запросите меня/учетные записи с этим longlived токеном. Определенно работает для нас, то есть отладчик показывает: "Истекает: никогда"


изменить - наш процесс

Итак, что мы делаем:

  • сначала аутентификация на стороне клиента с нашим приложением, где мы получаем "код" после того, как пользователь принимает запрашиваемые разрешения и связывает его аккаунт в нашем приложении

    https://www.facebook.com/dialog/oauth?   client_id = YOUR_APP_ID & redirect_uri = YOUR_REDIRECT_URI & scope = COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES & response_type = code

  • Теперь в нашем серверном приложении мы используем проверку на стороне сервера для обмена кодом для токена доступа:

    https://graph.facebook.com/oauth/access_token?   client_id = YOUR_APP_ID & redirect_uri = YOUR_REDIRECT_URI & client_secret = YOUR_APP_SECRET & code = CODE_GENERATED_BY_FACEBOOK

  • С помощью этого access_token мы осуществляем обмен на стороне сервера, как описано выше

  • Теперь мы запрашиваем у меня/учетные записи, и полученный access_token всегда действителен.

Надеюсь, что поможет

Ответ 2

Я немного упростил Пит и добавил шаг, чтобы получить токен доступа без истечения срока действия:

Ответ 3

Существует более простой способ сделать это с 2016 года:)


  • Перейдите к https://developers.facebook.com/tools/explorer

  • Выберите приложение из раскрывающегося списка в верхней правой руке сторона

  • Нажмите кнопку "Получить маркер доступа" чуть ниже раскрывающегося списка приложений с правой стороны

  • В раскрывающемся списке выберите страницу, на которой вы хотите получить токен доступа для. Если вы не видите свои страницы, то вам нужно убедиться youre установлен с ролью администратора для страницы. Также вам, возможно, придется нажмите "Получить токен доступа к странице" в раскрывающемся списке, после чего затем страницы будут отображаться в раскрывающемся списке в следующий раз, когда вы нажмете "Получить доступ" Token ".

  • Щелкните значок синего восклицательного знака в поле ввода "Доступ к токенам"

  • Нажмите кнопку "Открыть в значке доступа" на внизу справа от всплывающего окна

  • Нажмите кнопку "Расширить токен доступа" , чтобы получить токен, который никогда истекает


Исходная информация из этой статьи: https://www.rocketmarketinginc.com/blog/get-never-expiring-facebook-page-access-token/

Ответ 4

Хорошо, поэтому потребовалось около недели исследований, но вот мое решение. в https://developers.facebook.com/tools/explorer/ убедитесь, что у вас есть manage_page как часть вашего access_token. после этого используйте этот код с идентификатором вашего приложения, секретным и перенаправляемым:

<?php
   app_id = "APP_ID";
   $app_secret = "APP_SECERET";
   $post_login_url = "REDIRECT_URL";


   $code = $_REQUEST['code'];

   //Obtain the access_token with publish_stream permission 
   if(empty($code)){ 
      $dialog_url= "http://www.facebook.com/dialog/oauth?"
       . "client_id=" .  $app_id 
       . "&redirect_uri=" . urlencode( $post_login_url)
       .  "&COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES";
      echo("<script>top.location.href='" . $dialog_url 
      . "'</script>");
     }
    else {


      $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       . "&code=" . $code;
      $response = file_get_contents($token_url);
      $params = null;
      parse_str($response, $params);
      $access_token = $params['access_token'];
      echo 'access token: ' . $access_token.'<br>';

        if($access_token){


          $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       .'&grant_type=fb_exchange_token'
       . "&fb_exchange_token=" . $access_token;
       $response = file_get_contents($token_url);
       $access_token = $params['access_token'];
       echo 'new access token: '.$access_token;

        }
    }*/

?>

После этого скопируйте "новый токен доступа" и вернитесь к https://developers.facebook.com/tools/explorer/. Когда вы доберетесь до своего нового токена доступа в поле токена доступа. Затем нажмите "Отправить". После этого в node вы увидите клик + ____ и прокрутите вниз до учетных записей и нажмите на него. найдите страницу, на которой нужен токен доступа, и скопируйте ее и вставьте в поле ключа доступа. нажмите кнопку "Отладка", и вы увидите, что она никогда не истечет. сохраните этот токен, он останется действительным, если вы не reset секрет ваших приложений.

Ответ 5

Вы можете использовать следующий api из facebook, чтобы обновить токен до 60 дней, и как только истечет срок действия токена, вызовите тот же api снова за 60 дней, чтобы обновить его жизнь до 60 дней с этого момента Срок действия токена присутствует в параметре expires и его значение находится в секундах

Замените CLIENT_ID и CLIENT_SECRET своим фактическим значением

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

в ACCESS_TOKEN, поместите фактическое значение токена, не добавляя "access_token ="