Мне удалось разместить на странице Facebook через API (на C#), но когда администратор страницы выходит следующая ошибка:
и"(OAuthException - #190) ошибка при проверке маркера доступа: сессия является недействительным, так как пользователь выходит из системы.&и"
Как создать маркер доступа, который не истек?
Мне нужно решение, которое не'т открыть диалог с Facebook логин.
Вы никогда не сможете создать маркер доступа истекает без кодирования, следуя этой инструкции:
Это код, который я использую, чтобы создать и"не то" срок действия маркера доступа с помощью PHP в СДК:
$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;
Я Эхо маркер доступа, а затем отладить его с помощью маркер доступа отладчика. Результат должен быть: `истекает: никогда.
Ссылки из документации:
Вы можете использовать следующий API от facebook, чтобы обновить маркер жизни до 60 дней и только тогда, когда маркер заканчивается, называть один и тот же API раз в 60 дней, чтобы обновить свою жизнь до 60 дней с этого момента времени Маркер истекает присутствует в истекает параметр и его значение в секундах
Заменить CLIENT_ID и секрет клиента с их фактическим значением
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>
в маркер доступа, поставить фактическое значение маркера без добавления "и маркер доступа="и
Это's в ноябре 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>';
Выберите приложение создано выше и выберите команду “получить доступ к токену пользователя в выпадающем списке”
В пользователя маркер доступа всплывал вы можете выбрать несколько разрешений для маркера. Для не годности страницу маркер доступа вам необходимо выбрать и"опубликовать на страницах" и "Управление страницами и"
Перейти к https://developers.facebook.com/tools/accesstoken/. Здесь вы найдете короткоживущие маркеры доступа пользователя и маркер доступа приложение из всех приложений, которые вы
Меню отладки маркер доступа пользователя приложение создано выше. Это приведет вас к инструменту отладки. Где вы можете найти всю информацию короткоживущих маркер доступа пользователя.
В самом низу есть опция для создания долгоживущих(60 дней) доступ к токену пользователя для этого короткоживущего маркер доступа пользователя. Создания долгоживущих маркер доступа пользователя к опции “продлить маркер доступа”
а. Перейдите в графе проводник - https://developers.facebook.com/tools/explorer/.
б. Вставьте долгоживущих маркер доступа пользователя, созданный в предыдущем шаге внутри поле “маркер доступа”.
С. Доступ к “/меня?поля=маркер доступа” по API . Это приведет маркеров доступа к страницам и страницы, связанные с ними. Эти жетоны странице доступ не ограничен(до смены пользователем пароля/пользователя отозвать приложение)
а. Перейти к https://developers.facebook.com/tools/debug/accesstoken/
б. Добавить страницу маркер доступа, извлеченные из выше шаг в “маркер доступа “ и отладки
Вы получите истекает как никогда
Нашел здесь с небольшими изменениями: https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1
Принято отвечать уже не исправить. Это работает сейчас.
Откройте график проводника: https://developers.facebook.com
В правой части отображается маркер пользователя и GT; нажмите кнопку [отладка] кнопка
Это у вас принято, чтобы маркер доступа отладчик
Вам нужно получить токен доступа пользователя на FB.логин() с manage_pages, pages_show_list и другим В разрешения области видимости. Затем выполните ФБ.API-интерфейс(" у/{пользователь-приложение-идентификатор}/счетов с" поля: ...), чтобы получить список страниц с их соответственно информация, в том числе и маркер доступа. Здесь вы получите недолгим-маркер, но с помощью этого маркера вы сможете продлить срок действия, чтобы "не то".
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 для графа, используя ID приложения и секрет Приложения Приложения, которые вы используете для получения прав на управление страницей.
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
Ответ дает вам маркер доступа с время экспирации в quot и;не то".
Ссылки: API-интерфейс графической счета, Срок действия и распространяется маркеры доступа
Этот метод работал для меня, если вы используете 4.х
Facebook СДК:
//Класс для создания долгоживущих маркер
<?в PHP
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);
Используя Facebook API для В3.1 - Ни один из вышеперечисленных ответов работал для меня. Вместо этого мне пришлось:
Создать "и пользователей системы"
предоставить ему доступ к свойствам, которые мне нужны (в моем случае приложение)
создавать новый токен для приложения и пользователей системы
Инструкции я использовал, можно найти здесь
такой Makefile работает как от 2015-10-29. шаги 2 и 3 дают только на два месяца маркер, но маркер доступа приведен в заключительный этап шоу в в <а href="и https://developers.facebook.com/tools/debug/">отладчик</а> как "истекает: никогда и". этот ответ опирается на работу нескольких человек, и обеспечивается в надежде, что она будет упростить для разработчиков, вне зависимости от предпочитаемого языка программирования.
перед использованием этого, вам нужно положить ваш существующий идентификатор страницы, идентификатор приложения и секретный ключ приложения, в том порядке, в вашем ~/.netrc файл следующим образом: машина счета graph.facebook.com логин пароль 123456 234567 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; `СШ-х на свой сервер, если скрипт удаленно; и использовать сделать браузер=код Firefox вместо этого. следующие шаги должны работать с w3m имеют, как показано.
примечание: если вырезать и вставлять этот файл Makefile, обязательно замените 4-место вмятины с соответствующим вкладкам.
podrias intentar алго Комо Эсто
`` Administrar Paginas в <а href=на"#" Класс="от БТН и" функция onclick="и token_live()" и >адрес</а>
<тип сценария="и текст/javascript" и> token_live функция(){ ВАР 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", тип: 'пост', тип: 'html и#39;, данных: {api_public: 'АП-42b3a8aab70', }, }) .сделано(функция(данных) {
ВАР тхт = данные ВАР параметр obj = json-файле.разобрать(тхт);
token_live ВАР = кадриров.маркер доступа
предупреждение(url_infinit);
``