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

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

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

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

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

12 ответов


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

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

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

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

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

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

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

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

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

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-адресу в своем браузере.

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

{"способом":" ABC123","token_type":"на предъявителя","expires_in":5183791}

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

3. Получить ID пользователя

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

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

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

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

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

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

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


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

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

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


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


Я сделал PHP-скрипт, чтобы сделать его проще. создать приложение. В Graph API Explorer выберите приложение и получите токен пользователя с разрешением manage_pages и publish_pages. Найти ID вашей страницы в нижней части страницы. Заполните config 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 и далее, вы можете пропустить большую часть хлопот с получением маркера длительного доступа, просто нажав Продлить Маркер Доступа в самом низу инструмент отладчика маркеров доступа, после отладки короткого маркера доступа. Вооруженный информацией о 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 на приложение
  • вставьте долгоживущий маркер доступа в Маркер Доступа
  • рядом с Маркер Доступа выберите страницу, которую вы хотите маркер доступа. Маркер доступа отображается в виде новой строки.
  • клик я чтобы увидеть свойства этого маркера доступа
  • Нажмите кнопку" Открыть в инструменте маркера доступа "еще раз, чтобы открыть инструмент "отладчик маркера доступа", чтобы проверить свойства

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


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


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

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

наши подсчеты обмена на нашем сайте перестали работать, когда FB перевернул api до v 2.1. В нашем случае у нас уже было приложение FB, и мы не использовали логин FB. Ну и что? нужно было сделать, чтобы получить FB маркер приложения сделать новые запросы. Это по состоянию на август. 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
    

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

  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;
}

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

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