Понимание создания токенов доступа для ленты веб-сайта Facebook с использованием PHP SDK.

Моя общая цель — просто отображать сообщения с моей страницы Facebook на веб-сайте, но я чувствую, что упускаю что-то важное, что делает эту, казалось бы, простую задачу довольно сложной!

Я настроил свое приложение в Facebook Developer и сгенерировал тестовый токен доступа через Graph API Explorer, чтобы протестировать пример, приведенный на https://developers.facebook.com/docs/reference/php/examples., показанный ниже, который использует PHP SDK. Это прекрасно работает.

<?php

require_once __DIR__ . '/vendor/autoload.php'; 

$fb = new \Facebook\Facebook([
  'app_id' => '{your-app-id}',
  'app_secret' => '{your-app-secret}',
  'graph_api_version' => 'v5.0',
]);

try {
  $response = $fb->get('/me?fields=name,hometown', '{access-token}');
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

$me = $response->getGraphUser();
echo 'All the data returned from the server: ' . $me;
echo 'My name is ' . $me->getName();
$hometown = $me->getHometown();
$hometown_name = $hometown->getName();
echo 'My hometown is ' . $hometown_name;

?>

Однако, учитывая, что срок действия токена доступа истекает, у меня сложилось впечатление, что я должен запрашивать новый токен, когда кто-то посещает веб-сайт (при условии, что срок действия предыдущего истек, и при условии, что я храню его для использования в течение периода, когда он активен). Это правильно? Если это так, я не могу понять, как создать токен в этих обстоятельствах. Есть подобные сообщения 7-летней давности ( Facebook PHP SDK, работающий с токенами доступа ), но, похоже, ничего не работает с моим примером (предположительно, потому что это более старая версия SDK).

Может ли кто-нибудь помочь с созданием нового токена, чтобы мой основной канал работал без ручного создания токена доступа? Конечно, это всего лишь базовые вещи, но это сбивает меня с толку. Я видел ссылки на использование формата '{your-app-id}|{your-app-secret}' для создания токена доступа, но, похоже, это создает токен приложения, который не выполняет свою работу.

Любая помощь приветствуется!

Спасибо!


person Tim    schedule 01.03.2020    source источник


Ответы (1)


Я тоже боролся с этим в прошлом. Так что не волнуйтесь :) Соответствующая часть, которую вы ищете, - это «Долгоживущие токены доступа». Вот документация к нему:

https://developers.facebook.com/docs/facebook-login/access-tokens/refreshing/

person Christoph Kluge    schedule 01.03.2020
comment
Спасибо Кристоф. Я видел это, но думаю, что застрял на том факте, что для этого все еще требуется недолговечный токен доступа пользователя - будет ли это тот, который я изначально создал вручную? Прав ли я, говоря, что документация подразумевает, что долгоживущий токен будет обновляться каждый раз, когда кто-то посещает веб-сайт, поэтому у меня возникнет проблема, только если никто не посещал веб-сайт в течение 60 дней? Я вижу, что есть ссылки на iOS, Android и JS SDK — есть идеи, так ли это в случае с PHP SDK? - person Tim; 01.03.2020
comment
@Tim Посетители вашего сайта не имеют к этому никакого отношения - вы не используете токен доступа пользователя для своей учетной записи, вы используете токен доступа к странице, который разрешает доступ к вашей странице. Ваши посетители в этом совершенно не участвуют. - person CBroe; 02.03.2020
comment
@CBroe Хорошо, спасибо, но поскольку срок действия токена истекает, не означает ли это, что действие по загрузке страницы/запросу данных будет означать, что токен можно обновить при необходимости, иначе, если в течение 60 дней не было посетителей, токен будет истекает? - person Tim; 02.03.2020
comment
В первую очередь вам понадобится недолговечный токен доступа пользователя для вашей учетной записи. Это означает, что вам нужно взаимодействовать с Facebook в своем браузере, посетители вашего сайта не имеют к этому никакого отношения. - person CBroe; 02.03.2020
comment
@CBroe да, извините, я понимаю, что имею в виду последующий долгоживущий токен доступа, который я генерирую из него при запросе страницы. Из тестирования мне кажется, что долгоживущий токен обновляется каждый раз, когда запрашивается страница, и поэтому я думаю, что у меня не будет проблем с истечением срока действия, если сайт используется в течение определенного периода времени. - person Tim; 02.03.2020
comment
Я бы не стал полагаться на это; согласно документам, это автоматическое обновление должно влиять только на долгоживущий пользовательский токен, я не уверен, что оно автоматически «распространяется» на любые токены страниц, полученные с помощью пользовательского токена. Кроме того, это автоматическое обновление происходит для iOS/Android или JavaScript SDK, которые здесь даже не используются. - person CBroe; 02.03.2020
comment
@CBroe Хорошо, спасибо. Похоже, что токен доступа к странице с длительным сроком службы может быть тем, что мне нужно, поскольку в документации указано, что он не имеет даты истечения срока действия, но не может получить его по указанному URL-адресу. В недоумении от того, что я должен делать! Получить недолговечный токен пользователя, затем долгоживущий токен пользователя, затем долгоживущий токен страницы...? Просто не могу уложить в голове весь процесс. - person Tim; 02.03.2020
comment
Используемый URL-адрес graph.facebook.com/me/accounts?access_token= без API указанная версия, которая вернула токен страницы с датой истечения срока действия «Никогда». Так что пальцы скрещены, я должен быть хорошим ... спасибо, что указали мне правильное направление (ну, я предполагаю, что это так!) - person Tim; 02.03.2020