facebook: постоянный токен доступа к странице?


Я работаю над проектом, в котором страницы facebook являются одним из источников данных. Он импортирует некоторые данные из него периодически без участия графического интерфейса. Затем мы используем веб-приложение, чтобы показать данные, которые у нас уже есть.

не вся информация является публичной. Это означает, что я должен получить доступ к данным один раз, а затем сохранить его. Однако я не знаю этого процесса, и я еще не нашел хорошего учебника по этому вопросу. Я думаю, мне нужно access_token, Как я могу получить его от пользователя, шаг за шагом? Пользователь администратор страницы facebook, ему нужно будет добавить на страницу наше приложение FB?

EDIT: спасибо @phwd за подсказку. Я сделал учебник, Как получить постоянный маркер доступа к странице, даже с offline_access больше не существует.

EDIT: я только что узнал, что он ответил Здесь:Long-lasting FB access-токен для сервера, чтобы вытащить информацию о странице FB

12 155

12 ответов:

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

Я предлагаю использовать Graph API Explorer для всех этих шагов, за исключением случаев, когда указано иное.

0. Создать Приложение Facebook

если у вас уже есть приложение перейдите к шагу 1.

  1. на мой Приложения.
  2. нажмите "+ Добавить новое приложение".
  3. настройки приложения веб-сайта.

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

1. Получить Токен Кратковременного Доступа Пользователя

  1. перейти к Graph API Explorer.
  2. выберите приложение, для которого вы хотите получить маркер доступа (в раскрывающемся списке " приложение меню, а не меню "Мои приложения").
  3. Нажмите "Получить Маркер" > "Получить Маркер Доступа Пользователя".
  4. во всплывающем окне на вкладке "Расширенные разрешения" установите флажок "manage_pages".
  5. Нажмите Кнопку "Получить Маркер Доступа".
  6. предоставить доступ из учетной записи Facebook, которая имеет доступ для управления целевой страницы. Обратите внимание, что если этот пользователь потеряет доступ к окончательному, никогда не истекающий маркер доступа, скорее всего, перестанет работать.

маркер, который появляется в "Доступ Поле "токен" -это ваш кратковременный токен доступа.

2. Создания Долгоживущих Маркер

после эти инструкции из документов Facebook сделайте запрос GET на

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={app_secret}&fb_exchange_token={short_lived_token}

ввод идентификатора и секрета вашего приложения и кратковременного токена, созданного на предыдущем шаге.

вы не удается использовать Graph API Explorer. По какой-то причине он застревает на этом запросе. Я думаю это потому, что ответ не JSON, а строка запроса. Поскольку это запрос GET, вы можете просто перейти к URL-адресу в вашем браузере.

ответ должен выглядеть так:

{"access_token":" ABC123", "token_type": "предъявитель", "expires_in": 5183791}

"ABC123" будет вашим долгоживущим маркером доступа. Вы можете положить его в Отладчик Маркеров Доступа чтобы проверить. В разделе "истекает" он должен иметь что-то вроде "2 месяцы."

3. Получить идентификатор пользователя

используя маркер долгосрочного доступа, сделайте запрос GET на

https://graph.facebook.com/v2.10/me?access_token={long_lived_access_token}

The id поле-это идентификатор вашей учетной записи. Вам это понадобится для следующего шага.

4. Получить Постоянный Маркер Доступа К Странице

сделайте запрос GET на

https://graph.facebook.com/v2.10/{account_id}/accounts?access_token={long_lived_access_token}

ответ JSON должен иметь data поле, под которым находится массив элементов, к которым пользователь имеет доступ. Найдите элемент для страницы, с которой вы хотите получить постоянный маркер доступа. Элемент access_token поле должно иметь ваш постоянный токен доступа. Скопируйте его и протестируйте в Отладчик Маркеров Доступа. В Разделе " Истекает Срок Действия" он должен сказать "никогда".

вот мое решение, используя только Graph API Explorer & Отладчик Маркеров Доступа:

  1. Graph API Explorer:
    • выберите приложение из верхнего правого выпадающего меню
    • выберите "получить маркер доступа пользователя" из выпадающего списка (справа от поля маркер доступа) и выберите необходимые разрешения
    • копировать маркер доступа пользователя
  2. Отладчик Маркеров Доступа:
    • Вставить скопированный токен и нажмите "Отладка"
    • нажмите "расширить маркер доступа" и скопируйте сгенерированный долгоживущий маркер доступа пользователя
  3. Graph API Explorer:
    • Вставить скопированный токен в поле" токен доступа"
    • сделать запрос GET с "PAGE_ID?поля=маркер доступа"
    • найти постоянный маркер доступа к странице в ответе (узел "access_token")
  4. (Необязательно) Отладчик Маркеров Доступа:
    • вставьте постоянный токен и нажмите "Debug"
    • "истекает" должно быть "не"

(проверено с API версии 2.9-2.11, 3.0)

в дополнение к рекомендуемым шагам в Vlasec ответ, вы можете использовать:

Я сделал PHP-скрипт, чтобы сделать его проще. создать приложение. В Graph API Explorer выберите приложение и получите маркер пользователя с разрешением manage_pages и publish_pages. Найти ID вашей страницы в нижней части страницы. Заполните конфигурацию vars и запустите скрипт.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/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/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}

еще один PHP ответ, чтобы сделать жизнь проще. обновлено для Facebook Graph API 2.9 . Просто заполните ее и загрузите.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
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/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

добавление: (альтернатива)

график 2.9 и далее, вы можете пропустить большую часть хлопот с получением длинного маркера доступа, просто нажав Продлить Маркер Доступа в самом низу Access Token Debugger tool, после отладки короткого маркера доступа. Вооруженный информацией о pageid и longlivedtoken, запустите php ниже, чтобы получить постоянный токен доступа.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

хотя второй код экономит вам много хлопот, я рекомендую запустить первый php-код, если вы не очень спешите, потому что он проверяет pageid и userid. Второй код не будет работать, если вы выбрали токен пользователя по ошибке.

спасибо DW1 по и Роб

Если вы запрашиваете только данные страницы, то вы можете использовать маркер доступа страницы. Вам нужно будет только авторизовать пользователя один раз, чтобы получить маркер доступа пользователя; продлить его до двух месяцев действия, а затем запросить маркер для страницы. Все это объясняется в сценарий 5. Обратите внимание, что приобретенный маркер доступа к странице действителен только до тех пор, пока действителен маркер доступа пользователя.

при получении постоянного маркера доступа я следовал выше 5 шагов как Донат упоминается. Однако на 5-м шаге при создании постоянного токена доступа он возвращает долгоживущий токен доступа(который действителен в течение 2 месяцев), а не постоянный токен доступа(который никогда не истекает). я заметил, что текущая версия Graph API-это V2.5. Если вы пытаетесь получить постоянный токен доступа с V2.5, он дает долгоживущий токен доступа.Попробуйте сделать вызов API с V2. 2(Если вы не являетесь возможность изменить версию в Graph api explorer, нажмите вызов API https://graph.facebook.com/v2.2/{account_id}/accounts?access_token={long_lived_access_token} в новой вкладке с V2. 2) тогда вы получите постоянный токен доступа(который никогда не истекает)

Я пробовал эти шаги: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer

Получить Постоянный Маркер Доступа К Странице

  • перейдите в Graph API Explorer
  • выберите app на приложение
  • вставьте долгоживущий маркер доступа в Маркер Доступа
  • рядом с Маркер Доступа, выберите нужную страницу маркер доступа. Маркер доступа отображается в виде новой строки.
  • клик я чтобы увидеть свойства этого маркера доступа
  • Нажмите кнопку" Открыть в Access Token Tool "еще раз, чтобы открыть инструмент" Access Token Debugger " для проверки свойств

один совет, он работал только для меня, когда язык этой страницы английский язык.

В дополнение к перечисленным методам стоит отметить, что для сервера-сервер приложений, вы также можете использовать эту форму перманентного маркера доступа: app_id|app_secret Этот Тип маркера доступа называется маркером приложения. Как правило, его можно использовать для вызова Graph API и запроса общедоступных узлов в фоновом режиме приложения. Это упоминается здесь:https://developers.facebook.com/docs/facebook-login/access-tokens

достигнут предел запроса Приложения (#4) - FB API v2.1 и выше

этот ответ привел меня к" окончательному ответу для нас", и поэтому он очень связан, поэтому я добавляю его здесь. Хотя это связано с вышеизложенным, это отличается, и кажется, что FB немного упростил процесс.

наши счетчики обмена на нашем сайте перестали работать, когда FB перевернул api до v 2.1. В нашем случае у нас уже было приложение FB, и мы не использовали логин FB. Ну и что мы нужно было сделать, чтобы получить FB App Token сделать новые запросы. Это по состоянию на август. 23 2016.

  1. перейти к: https://developers.facebook.com/tools/explorer
  2. выберите версию api, а затем используйте GET и вставьте следующее:

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    вы хотите взять свой идентификатор и свой приложения со страницы вашего приложения. главный разработчик приложений FB страница

  3. запустите запрос графика, и вы увидите:

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    здесь

    "app-id"
    и
    "app-token"
    будет Ваш идентификатор приложения со страницы приложения FB и сгенерированный хэш приложения FB, который вы только что получили.
  4. далее проверьте свой новый маркер доступа к приложению:тестер маркеров доступа FB

  5. вы должны увидеть, оклейкой

    "app-token"
    в тестер токенов, один токен на основе приложения без срок годности/время действия.

в нашем случае мы используем FB JS sdk, поэтому мы изменили наш вызов, чтобы быть таким (обратите внимание на это получает только количество акций, а не Доля и количество комментариев в сочетании, как это было раньше):

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

теперь это работает правильно. Это потребовало много поиска и официального отчета об ошибке с FB, чтобы подтвердить, что мы должны начать делать маркированные запросы к api FB. В стороне я сделал запрос, что они (FB) добавляют ключ к коду ошибки (#4), который упоминает маркированный запрос.

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

многие из этих примеров не работают, не уверен, что это из-за 2.9 v выходит, но я стучал головой. В любом случае я взял версию @dw1 и немного изменил ее с помощью видео @KFunk и получил эту работу для меня за 2.9. Надеюсь, это поможет.

$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
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;
}

нашел ответ что относится к инструмент что действительно очень помогло.

Я надеюсь, что этот ответ все еще действителен, когда вы читаете это.