Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

  • Создайте долгоживущий токен для администрирования страницы поклонника http://appdevresources.blogspot.sg/2012/11/extend-facebook-access-token-make-it.html (приятное объяснение с изображениями)
  • Генерировать долгоживущий токен для самой страницы-фаната http://appdevresources.blogspot.sg/2012/11/retrieving-facebook-page-id-and.html
  • Использовать токен из 2) для публикации на стене страницы вентилятора (нет необходимости в диалоговом окне входа в Facebook)
  • Результирующий токен никогда не истечет (даже если администратор страницы вентилятора вышел из системы)

Ответ 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

  1. Создайте приложение, если у вас его нет - https://developers.facebook.com/
  2. Создайте недопустимый токен доступа пользователя в обозревателе графиков - https://developers.facebook.com/tools/explorer/

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

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

  1. Создать долгосрочный токен доступа пользователя

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

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

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

  1. Создать токен доступа к странице с истекшим сроком действия

а. Перейдите в Проводник графиков - https://developers.facebook.com/tools/explorer/.

б. Вставьте долгосрочный токен доступа пользователя, созданный на предыдущем шаге, в поле "Токен доступа".

с. Доступ к API '/me? Fields = access_token'. Это приведет к жетонам доступа к страницам и связанным с ними страницам. Срок действия этих токенов доступа к странице никогда не истечет (пока пользователь не изменит пароль/пользователь не отзовет приложение)

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

а. Перейти к 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);

'''