Создайте токен доступа "никогда не истекающий" для страницы Facebook
Мне удалось опубликовать страницу Facebook через API (С#), но когда администратор страницы выходит из системы, возникает следующая ошибка:
"(OAuthException - # 190) Ошибка проверки маркера доступа: сеанс недействителен, поскольку пользователь вышел из системы."
Как создать токен доступа, который никогда не истек?
Мне нужно решение, которое не открывает диалог входа в Facebook.
Ответы
Ответ 1
Ответ 2
Обнаружив, что возможно создать токен доступа к странице Facebook, срок действия которого не истекает (см. раздел "Расширения токена доступа к странице" в документации ), вот ясное, пошаговое руководство для всех тех, кто смотрит на то же самое:
- Убедитесь, что вы являетесь администратором страницы FB, с которой вы хотите получить информацию из
- Создайте приложение FB (должно быть с той же учетной записью пользователя, которая является администратором страницы).
- Перейдите к API-интерфейсу API графиков Facebook.
- В правом верхнем углу выберите приложение FB, созданное в раскрывающемся списке "Приложение"
- Нажмите "Получить токен доступа"
- Убедитесь, что вы добавили разрешение
manage_pages
-
Преобразуйте этот токен с недолгосрочным доступом в долгоживущий, сделав этот вызов API-интерфейса Graph: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
-
Перенесите новый долгоживущий токен доступа обратно
- Сделайте вызов API Графа, чтобы увидеть ваши учетные записи, используя новый долгоживущий токен доступа:
https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
- Возьмите access_token для страницы, на которую вы будете получать информацию из
- Нарисуйте маркер, чтобы увидеть, что он установлен на Expires: Never!
Это должно сделать это. Теперь у вас должен быть токен доступа к странице Facebook, который не истекает!
Ответ 3
Вы можете генерировать никогда не истекающий токен доступа без кодирования, следуя этим инструкциям:
- Откройте проводник графика: https://developers.facebook.com/tools/explorer/.
- Выберите свое приложение из раскрывающегося списка справа.
- В раскрывающемся списке "Получить токен" выберите свою страницу поклонников.
- Нажмите кнопку отправки, чтобы создать токен.
- С левой стороны в поле "Поиск поля" введите access_token и нажмите "Отправить" еще раз. Скопируйте этот токен из главного окна.
- Откройте https://developers.facebook.com/tools/debug/accesstoken и вставьте маркер здесь. Нажмите "Отладка".
- Нажмите кнопку "Расширить токен доступа". Это будет генерировать никогда не истекающий токен.
Ответ 4
Это код, который я использую для генерации токена доступа "Никогда", используя 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
.
Ссылки из Документации:
Ответ 5
Вы можете использовать следующую api из facebook, чтобы обновить токен до 60 дней, и как только истечет срок действия токена, вызовите тот же api снова за 60 дней, чтобы обновить его жизнь до 60 дней с этого момента
Срок действия токена присутствует в параметре expires и его значение находится в секундах
Замените CLIENT_ID и CLIENT_SECRET своим фактическим значением
https://graph.facebook.com/oauth/access_token?client_id=<CLIENT_ID>
&client_secret=<CLIENT_SECRET>&grant_type=fb_exchange_token
&fb_exchange_token=<ACCESS_TOKEN>
в ACCESS_TOKEN, поместите фактическое значение токена, не добавляя "access_token ="
Ответ 6
- Создайте приложение, если у вас его нет - https://developers.facebook.com/
- Создайте недопустимый токен доступа пользователя в обозревателе графиков - https://developers.facebook.com/tools/explorer/
Выберите приложение, созданное выше, и выберите "Получить маркер доступа пользователя в раскрывающемся списке"
Во всплывающем окне токена доступа пользователя вы можете выбрать некоторые разрешения для токена.
Для токена доступа к страницам без истечения срока действия необходимо выбрать "публиковать страницы" и "управлять страницами"
- Создать долгосрочный токен доступа пользователя
Перейти на https://developers.facebook.com/tools/accesstoken/. Там вы найдете кратковременные токены доступа пользователей и токены доступа ко всем приложениям, которые у вас есть
Нажмите опцию отладки токена доступа пользователя созданного выше приложения. Это приведет вас к инструменту отладки. Где вы можете найти всю информацию о недопустимом токене доступа пользователя.
Внизу есть опция для генерации токена доступа пользователя с длительным сроком действия (60 дней) для этого токена доступа пользователя с коротким сроком действия. Сгенерируйте токен доступа для долгоживущего пользователя, выбрав "Расширить токен доступа"
- Создать токен доступа к странице с истекшим сроком действия
а. Перейдите в Проводник графиков - https://developers.facebook.com/tools/explorer/.
б. Вставьте долгосрочный токен доступа пользователя, созданный на предыдущем шаге, в поле "Токен доступа".
с. Доступ к API '/me? Fields = access_token'. Это приведет к жетонам доступа к страницам и связанным с ними страницам. Срок действия этих токенов доступа к странице никогда не истечет (пока пользователь не изменит пароль/пользователь не отзовет приложение)
- Подтвердите токен доступа к странице без истечения срока действия
а. Перейти к https://developers.facebook.com/tools/debug/accesstoken/
б. Добавьте токен доступа к странице, полученный с шага выше, в поле "Маркер доступа" и отладьте
Вы получите истекает как Никогда
Нашел здесь с небольшими изменениями:https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1
Ответ 7
Это ноябрь 2018 года, и это сработало для меня!
<?php
$args=[
'usertoken'=>'xxx',
'appid'=>'xxx',
'appsecret'=>'xxx',
'pageid'=>'xxx'
];
function generate_token($args){
$r = json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
$longtoken=$r->access_token;
$r=json_decode(file_get_contents("https://graph.facebook.com/{$args['pageid']}?fields=access_token&access_token={$longtoken}")); // get user id
$finaltoken=$r->access_token;
return $finaltoken;
}
echo "https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}";
echo '<br><br>Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
![Never Expire from FB Debug]()
Ответ 8
Принятый ответ больше не верен. Это работает сейчас.
Открыть графический проводник: https://developers.facebook.com
- Войдите и выберите свое приложение из раскрывающегося списка справа.
- После входа в систему нажмите значок "Сервис и поддержка" в правом верхнем углу.
- Затем выберите ссылку "Инструмент токена доступа" с правой стороны под именем ваших приложений
Справа от отображаемого токена пользователя > нажмите кнопку [Отладка]
Это приведет вас к отладчику маркера доступа
- Нажмите синюю кнопку внизу, в которой указывается Расширение маркера доступа
- Это скажет: этот новый долгоживущий токен доступа никогда не истечет.
- Скопируйте и вставьте этот токен в свое приложение, т.е. EAAYMFDuobYUBADtYjVDukwBGpwPHOCY0iYglYY3j3r200MzyBZB4.....
Ответ 9
Вам нужно получить токен доступа пользователя с помощью FB.login() с manage_pages, pages_show_list и другими в разрешениях области. Затем выполните FB.api("/{user-app-id}/account", 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 Graph, используя идентификатор приложения и секрет приложения, которые вы используете для получения разрешений на управление страницей.
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
Ответ дает вам токен доступа со сроком действия в "Никогда".
Рекомендации:
API Graph Accounts,
Истечение срока действия и расширение маркеров доступа
Ответ 10
Метод ниже работал у меня, если вы используете 4.x
Facebook SDK:
- Впервые создайте токен доступа к пользовательскому доступу с помощью метода здесь.
- Теперь! Это время, чтобы преобразовать этот токен в 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);
}
}
Вы можете использовать вышеуказанный класс следующим образом:
$longToken = new FacebookLongLivedTokenGenerator();
echo $longToken->generateFacebookLongLivedToken($appId, $appSecret, $oldUserAccessToken);
Ответ 11
этот файл Makefile работает с 2015 по 2010 год. шаги 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
на ваш сервер, если script удаленно размещен; и вместо этого используйте make BROWSER=firefox code
. следующие шаги должны работать с w3m, как показано.
note: если вырезаете и вставляете этот Makefile, обязательно замените 4-пространственные углубления соответствующими вкладками.
Ответ 12
Использование Facebook API v3.1 - ни один из ответов выше не сработал для меня.
Вместо этого мне пришлось:
1) Создать "системного пользователя"
2) Предоставьте ему доступ к нужным мне свойствам (в моем случае - приложению)
3) Создайте новый токен для этого приложения и системного пользователя
Инструкции, которые я использовал, можно найти здесь here
Ответ 13
podrias intentar algo como esto
Administrar Paginas
<a href="#" class="btn" onclick="token_live()" >url</a>
<script type="text/javascript">
function token_live(){
var token_app = "";
$.ajax({
url: "https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id=598062314053459&client_secret='client_secret'&fb_exchange_token=access_token",
type: 'POST',
dataType: 'HTML',
data: {api_public: 'AP-42b3a8aab70',
},
})
.done(function(data) {
var txt = data
var obj = JSON.parse(txt);
var token_live = obj.access_token
var url_infinit = "https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id='remplaza_cliente_id'&client_secret='client_secret'&fb_exchange_token="+token_live;
alert(url_infinit);
'''