Введение
У меня есть небольшая фан-страница в Facebook, на которой я публикую новости. Для этого я использую долгоживущий токен доступа, срок действия которого истекает каждые 60 дней с разрешениями: «manage_pages» и «publish_stream».
После изучения я не нашел решения «вот оно», поэтому я создал новый пост с описанием моей проблемы, соединив все, что я нашел до сих пор, в качестве резюме. Он вырос немного большим LOL (мои извинения).
Чтобы получить недолговечный токен доступа, я обычно выполняю следующие шаги, как описано здесь.
- Перейдите на страницу https://developers.facebook.com/tools/explorer/ и выберите свой app из первого выпадающего меню слева.
- Нажмите кнопку «Получить токен доступа», а в окне «Выбор разрешений» нажмите «Расширенные разрешения», отметьте manage_pages и publish_stream и нажмите синюю кнопку «Получить токен доступа».
- На этом этапе вас могут попросить предоставить вашему приложению разрешение на доступ к вашей учетной записи Facebook, примите.
- Затем щелкните в конце текстового поля рядом с раскрывающимся списком «ПОЛУЧИТЬ» и замените числа для: я/учетные записи и нажмите синюю кнопку рядом с этим текстовым полем.
- Вы получите токены для всех своих страниц, включая страницу приложения. Найдите в списке название вашей страницы, будет выглядеть так: "name": "Название вашей страницы"
- Когда вы найдете свою страницу, скопируйте токен доступа для страницы (будет очень длинным), который может выглядеть так: "access_token": "XXXXXXXX". Также скопируйте id страницы: "id": "XXXXX".
С использованием
https://graph.facebook.com/oauth/access_token?
client_id=[clientid]
&client_secret=[clientsecret]
&grant_type=fb_exchange_token
&fb_exchange_token=[shortlivedaccesstoken]
Либо в браузере, либо по запросу curl, например, я получаю свой 60-дневный токен доступа. (Источник)
Как описано в документации Facebook API , долгоживущие токены доступа обновлять нельзя. Конечно, я могу обновить токен, используя указанную выше конечную точку, и получить новый долгоживущий токен с той же датой истечения срока действия.
РЕДАКТИРОВАТЬ: Чтобы создать сообщение на стене фан-страницы (как пользователь страницы), я делаю что-то. нравится:
$this->fb = new Facebook(array(
'appId' => [app-id],
'secret' => [app-secret]
));
//~Get data from DB here~
//~some error handling in case data fetching failed~
$fbToken = '';
$fbToken = *[facebook access token]*;
$mediaData = array(
'picture' => [picture-url],
'message' => [message],
'link' => [link],
'name' => [name],
'description' => [description],
'access_token' => $fbToken
);
try {
$post_id = $this->fb->api('/' . [fb-page-id] . '/feed', 'post', $mediaData);
} catch(FacebookApiException $e) {
//log file output
}
Проблема
Вы можете получить новый токен доступа с длительным сроком действия, только используя токен доступа с коротким сроком действия.
@maxim-aniskov описывает способ получения нового токена доступа с коротким сроком действия здесь. Столкнувшись с той же проблемой, он работает один раз при первой выборке. Принятый ответ включает удаление текущих разрешений.
Кроме того, в this post в комментариях намекнули, что даже недолговечный токен доступа не может быть обновлен без взаимодействия с пользователем.
Наконец, как вы можете видеть, многие люди сталкиваются с одним и тем же весельем здесь тоже.
Где-то я даже читал, что существующий долгоживущий токен доступа можно обновить, но только если срок его действия истекает. Информации о том, в каком временном интервале «вот-вот истечет», нет. (5 дней)
В итоге ни один из них мне больше не помог.
Вопрос
Подводя итог вышесказанному~
Как получить новый недолговечный токен доступа с ранее использовавшимися разрешениями (manage_pages и publish_stream), запрашивающий конечную точку API?
Неужели это возможно только путем отзыва ранее предоставленного доступа? Веб-сайт, на котором я пытаюсь обновить свой токен доступа, предназначен для публикации обновлений в реальном времени, поэтому я бы хотел, чтобы время простоя было минимальным или отсутствовало. истекает, я бы предпочел просто нажать одну кнопку, чтобы сделать это.