Создайте токен доступа «никогда не истекающий» для страницы Facebook

Мне удалось опубликовать на Facebook страницу через API (C #), но когда администратор страницы выходит из системы, возникает следующая ошибка:

“(OAuthException – # 190) Ошибка проверки маркера доступа: сеанс недействителен, поскольку пользователь вышел из системы.”

Как я могу создать токен доступа, который никогда не истек?

Мне нужно решение, которое не открывает диалог входа в Facebook.

Это код, который я использую для генерации «Никогда» истекшего токена доступа с помощью PHP SDK :

$facebook = new \Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.10', 'default_access_token' => '{access-token}' ]); // Exchange token $token = $facebook->post('/oauth/access_token', array( 'grant_type' => 'fb_exchange_token', 'client_id' => 'APP ID', 'client_secret' => 'APP Secret', 'fb_exchange_token' => 'access Token' ) ); $token = $token->getDecodedBody(); $token = $token['access_token']; echo $token; 

Я повторяю токен доступа, а затем отлаживаю его с помощью отладчика маркера доступа . Результат должен быть: Expires: Never .

Ссылки из Документации:

  • Установить расширенный токен
  • Истечение срока действия и расширение токенов
  • Расширение токенов доступа к странице

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

  1. Открыть графический проводник: https://developers.facebook.com/tools/explorer/ .
  2. Выберите приложение из раскрывающегося списка справа.
  3. В раскрывающемся списке «Получить токен» выберите свою страницу вентилятора.
  4. Нажмите кнопку отправки, чтобы создать токен.
  5. С левой стороны в поле «Поиск поля» введите access_token и нажмите «Отправить» еще раз. Скопируйте этот токен из главного windows.
  6. Откройте https://developers.facebook.com/tools/debug/accesstoken и вставьте токен здесь. Нажмите «Отладка».
  7. Нажмите кнопку «Расширить токен доступа». Это будет генерировать никогда не истекающий токен.
  1. Создайте долгоживущий токен для администратора страницы поклонника http://appdevresources.blogspot.sg/2012/11/extend-facebook-access-token-make-it.html (приятное объяснение с изображениями)
  2. Создайте долгоживущий токен для самой страницы фанатов http://appdevresources.blogspot.sg/2012/11/retrieving-facebook-page-id-and.html
  3. Использовать токен из 2) для публикации на стене страницы вентилятора (нет необходимости в диалоговом окне входа в Facebook)
  4. Результирующий токен никогда не истечет (даже если администратор страницы вентилятора вышел из системы)

Вы можете использовать следующую 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 =”

Принятый ответ больше не правильный. Это работает сейчас.

Открыть графический проводник: https://developers.facebook.com

  • Войдите и выберите свое приложение из раскрывающегося списка справа
  • После входа в систему щелкните значок «Сервис и поддержка» в правом верхнем углу
  • Затем выберите ссылку «Доступ к токену» на правой стороне под именем ваших приложений

Справа от отображаемого токена пользователя> нажмите кнопку [Отладка]

Это приведет вас к отладчику токена доступа

  • Нажмите синюю кнопку внизу, в которой говорится: «Расширить токен доступа»
  • Это скажет: этот новый долгоживущий токен доступа никогда не истечет
  • Скопируйте и вставьте этот токен в свое приложение, т.е. EAAYMFDuobYUBADtYjVDukwBGpwPHOCY0iYglYY3j3r200MzyBZB4 …..
  1. Создайте приложение, если у вас его нет – https://developers.facebook.com/
  2. Создайте краткосрочный токен доступа пользователя в Graph Explorer – https://developers.facebook.com/tools/explorer/

Выберите свое приложение, созданное выше, и выберите «Получить токен доступа пользователя в раскрывающемся списке»

В токенах доступа пользователя вы можете выбрать некоторые разрешения для токена. Для токена доступа к неограниченной странице вам нужно выбрать «опубликовать страницы» и «управлять страницами»,

  1. Создание долгоживущего токена доступа пользователя

Перейдите на страницу https://developers.facebook.com/tools/accesstoken/ . Там вы найдете краткосрочные токены доступа и токен доступа к приложениям всех приложений, которые у вас есть.

Нажмите кнопку отладки для токена доступа пользователя, созданного выше. Это приведет вас к инструменту отладки. Где вы можете найти всю информацию о краткосрочном токене доступа пользователя.

В нижней части есть возможность генерировать долгоживущий токен доступа (60 дней) для этого токенового ключа с недолговечным доступом. Создайте долгоживущий токен доступа пользователя, выбрав «Расширить токен доступа»,

  1. Создать токен доступа без истекшего срока

а. Перейдите в Графический проводник – https://developers.facebook.com/tools/explorer/ .

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

с. Доступ “/ me? Fields = access_token” api. Это приведет к токенам доступа к страницам и связанным с ними страницам. Эти токены доступа к странице никогда не истекут (пока пользователь не изменит пароль / пользователь, отменивший приложение)

  1. Проверка токена доступа к неограниченной странице

а. Перейдите на страницу https://developers.facebook.com/tools/debug/accesstoken/.

б. Добавьте маркер доступа к странице, полученный с предыдущего шага, в поле «Доступ к токену» и отлаживайте

Срок действия истекает как никогда.

Найденные здесь с небольшими изменениями: https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1

Метод ниже работал для меня, если вы используете 4.x Facebook SDK:

  1. Создайте временный токен доступа пользователя в первый раз, используя метод, упомянутый здесь .
  2. Теперь! Пришло время преобразовать этот токен в Long Term Token, используя PHP SDK 4.x. Используйте следующий код, поскольку он работал для меня:

//Class for Generating the Long Lived Token

 namespace App\Lib; use Facebook\FacebookApp; use Facebook\FacebookClient; use Facebook\Authentication\OAuth2Client; class FacebookLongLivedTokenGenerator { public $longLivedTokenGenerated = false; public function generateFacebookLongLivedToken($appId, $appSecret, $oldToken) { //request new access token $oauth2Fb = new OAuth2Client(new FacebookApp($appId, $appSecret), new FacebookClient()); $longLivedToken = $oauth2Fb->getLongLivedAccessToken($oldToken); if ($longLivedToken) { $this->longLivedTokenGenerated = true; $this->userAccessToken = $longLivedToken; } return trim($this->userAccessToken); } } 

Вы можете использовать class выше:

 $longToken = new FacebookLongLivedTokenGenerator(); echo $longToken->generateFacebookLongLivedToken($appId, $appSecret, $oldUserAccessToken); 

этот Makefile работает по состоянию на 2015-10-29. шаги 2 и 3 дают только двухмесячный токен, но токен доступа к странице, указанный на последнем шаге, показывает в отладчике как «Истекает: никогда». этот ответ опирается на работу нескольких других и предоставляется в надежде, что он упростит работу разработчиков независимо от предпочитаемого языка программирования.

перед использованием этого вам необходимо поместить свой существующий идентификатор страницы, идентификатор приложения и приложение в этом порядке в файл ~ / .netrc следующим образом: machine graph.facebook.com login 123456 account 234567 password 345678

также перед использованием этого, войдите в Facebook с помощью w3m, нажав «Запомнить меня».

 MACHINE := graph.facebook.com PAGE_ID := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$4}' $(HOME)/.netrc) APP_ID := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$6}' $(HOME)/.netrc) APP_SECRET := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$8}' $(HOME)/.netrc) PERMISSIONS := manage_pages,publish_actions,publish_pages FB := https://www.facebook.com GRAPH := https://$(MACHINE) CODE ?= TOKEN ?= TWOMONTHTOKEN ?= BROWSER ?= w3m -dump REDIRECT := http://jc.unternet.net/test.cgi CLIENT_SIDE := $(FB)/dialog/oauth?client_id=$(APP_ID)&redirect_uri=$(REDIRECT) CLIENT_SIDE := $(CLIENT_SIDE)&scope=$(PERMISSIONS)&response_type=code SERVER_SIDE := $(GRAPH)/oauth/access_token?client_id=$(APP_ID) SERVER_SIDE := $(SERVER_SIDE)&redirect_uri=$(REDIRECT) SERVER_SIDE := $(SERVER_SIDE)&client_secret=$(APP_SECRET)&code=$(CODE) LONG_LIVED := $(GRAPH)/oauth/access_token?client_id=$(APP_ID) LONG_LIVED := $(LONG_LIVED)&client_secret=$(APP_SECRET) LONG_LIVED := $(LONG_LIVED)&grant_type=fb_exchange_token LONG_LIVED := $(LONG_LIVED)&fb_exchange_token=$(TOKEN) ACCOUNTS := $(GRAPH)/me/accounts?access_token=$(TWOMONTHTOKEN) export env: env @echo Usage: make code @echo ' ' make CODE=codefrompreviousstep token @echo ' ' make TOKEN=tokenfrompreviousstep longterm @echo ' ' make TWOMONTHTOKEN=tokenfrompreviousstep accounts @echo Then edit '$$HOME/.netrc' replacing password with page token code: $(BROWSER) "$(CLIENT_SIDE)" token: $(BROWSER) "$(SERVER_SIDE)" longterm: $(BROWSER) "$(LONG_LIVED)" accounts: $(BROWSER) $(ACCOUNTS) 

оказывается, во многих случаях первый шаг терпит неудачу с w3m. в этом случае установите другой браузер, например firefox; ssh -X на ваш сервер, если сценарий удаленно размещен; и используйте вместо этого make BROWSER=firefox code . следующие шаги должны работать с w3m, как показано.

примечание: если вырезаете и вставляете этот Makefile, обязательно замените 4-пространственные углубления соответствующими вкладками.

Вам нужно получить токен доступа пользователя FB.login () с помощью manage_pages, pages_show_list и другие в разрешениях области. Затем запустите FB.api (“/ {user-app-id} / accounts”, fields: …), чтобы получить список страниц со своей информацией, в том числе access_token. Здесь вы получаете кратковременный токен, но с этим маркером вы можете продлить срок действия до «Никогда».

 FB.login(function (response){ if(response.status!=="connected"){ return; } FB.api('/'+USER_APP_ID+'/accounts',{fields: 'id, name, access_token,category, picture'}, function(d){ console.log(d) // Here you get access_token (short-lived-token) }); },{scope: 'manage_pages, pages_show_list', auth_type: 'rerequest'}); 

Используя последний токен доступа и со стороны сервера, вы вызываете API-графику, используя App ID и App Secret приложения, которое вы используете для получения разрешений для управления страницей.

 GET /oauth/access_token? grant_type=fb_exchange_token& client_id={app-id}& client_secret={app-secret}& fb_exchange_token={short-lived-token} 

Ответ дает вам токен доступа с истечением срока действия в «Никогда».

Ссылки: учетные записи API-графиков , срок действия и расширение токенов доступа

Использование Facebook API v3.1 – Ни один из вышеперечисленных ответов не работал для меня. Вместо этого мне пришлось:

1) Создайте “системного пользователя”

2) Предоставьте ему доступ к свойствам, которые мне нужны (в моем случае приложение)

3) Создайте новый токен для этого приложения и пользователя системы

Инструкции, которые я использовал, можно найти здесь

  • Объявление открытого пространства Open Graph: HTML с XMLNS или префикс главы?
  • Как получить Likes Count при поиске Facebook Graph API с помощью поиска = xxx
  • пустой белый экран после входа в FB через веб-приложение?
  • Страницы в Facebook - авторитетный список категорий
  • Как Facebook Sharer выбирает Изображения и другие метаданные при совместном использовании моего URL?
  • Создание страницы Facebook программно через Open Graph API
  • Интеграция с андроидной фейсбукой
  • Android facebook applicationId не может быть нулевым
  • Ссылка Facebook API post с пользовательским изображением
  • Получить идентификатор приложения из токена доступа пользователя (или проверить исходное приложение для токена)
  • Как очистить кеш Facebook Sharer?
  • Interesting Posts
    Давайте будем гением компьютера.