Как получить новый «короткоживущий» токен доступа к facebook (на стороне сервера) с ранее использовавшимися разрешениями, не используя проводник API?

Введение


У меня есть небольшая фан-страница в 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?

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



person Soo Star    schedule 29.03.2014    source источник
comment
Ваш вопрос еще не завершен. Вы хотите размещать сообщения на странице от имени страницы или от имени пользователя? Поскольку вы получили токен доступа к странице, но никогда не использовали его для публикации; вместо этого вы используете расширенный токен пользователя? Почему так?   -  person Sahil Mittal    schedule 29.03.2014
comment
Если вы хотите опубликовать как страницу, у вас может быть токен с неограниченным сроком действия, который можно использовать для этого :). Проверьте ответ.   -  person Sahil Mittal    schedule 29.03.2014
comment
@SahilMittal Какое правильное название вопроса? хахах   -  person Soo Star    schedule 30.03.2014
comment
Плитка и объяснение мне кажутся прекрасными :) Но вы не должны добавлять ответ на вопрос :/   -  person Sahil Mittal    schedule 30.03.2014
comment
@SahilMittal часть решения? Я удалю это тогда D:   -  person Soo Star    schedule 30.03.2014


Ответы (1)


Вы совсем запутались с потоком на самом деле! Позвольте мне объяснить вам, как работает этот токен доступа.

Прежде всего, получение токена доступа из Graph API Explorer — это всего лишь способ, конечно, не самый лучший. (но в вашем случае все в порядке, так как я думаю, что вы управляете страницей из своей учетной записи, а не для других пользователей facebook - поправьте меня, если я ошибаюсь).

Как правило, интеграция с facebook используется для получения доступа для пользователя facebook и выполнения некоторых действий или получения данных пользователя, и это делается путем реализации Вход через Facebook. Вход в facebook учитывает предоставленные пользователем разрешения и возвращает токен доступа — это токен доступа пользователя


Теперь, если вы хотите публиковать сообщения от имени самой страницы, у вас есть использовать токен доступа к странице (API-/me/accounts). Теперь хорошо то, что вы можете продлить токен доступа к странице, срок действия которого никогда не истекает! Я объяснил шаги здесь.

Если вы хотите опубликовать сообщение от имени пользователя/администратора, вы используете токен доступа пользователя, который можно расширить, выполнив запрос \GET, который вы уже объяснили. Теперь, когда вы сказали-

Я даже читал, что существующий токен доступа с длительным сроком службы можно обновить, но только в том случае, если срок его действия истекает. Информации о том, в каком временном интервале «вот-вот истечет», нет. (5 дней нет)

Это утверждение неверно! Вы можете продлить токен в любой момент. Сегодня у вас есть токен со сроком действия 60 дней, завтра его можно снова продлить со сроком действия до 60 дней. Чтобы обновить расширенный токен, вы должны повторить шаги, которые вы использовали для создания расширенного токена в первый раз, т.е. получить токен доступа (обычный) с помощью потока входа в систему или проводника графа API (да, другого способа НЕТ). для получения токена доступа) и сделайте запрос \GET для получения расширенного. Это оно!

Ты спросил-

Как получить новый недолговечный токен доступа с ранее использовавшимися разрешениями (manage_pages и publish_stream), запрашивающий конечную точку API?

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

Изменить

Если вы не хотите использовать Graph API Explorer, вы можете написать небольшой скрипт, используя JS/PHP/другой язык, и внедрить логин facebook – получить токен доступа – и расширить этот токен (о, подождите !вы не сказали как вы посты создаете?Это можно сделать только вашим скриптом-достаточно просто!). Удачи!

person Sahil Mittal    schedule 29.03.2014
comment
Я попробую это. Действительно, я немного запутался с потоком - person Soo Star; 29.03.2014
comment
PS. не забудьте пометить это как правильное/проголосовать, если помогло. Так что этот вопрос можно закрыть. Удачи - person Sahil Mittal; 29.03.2014
comment
хахах хорошо, я понял, я думаю. (PAGE_ID = имя страницы c -.-) .. токен, возвращенный graph.facebook.com/{page-id}?fields=access_token&access_token={long-lived-token} говорит Истекает: никогда в отладчике токенов :)) Я попробую опубликовать это, а затем отмечу ваш ответ как правильный. - person Soo Star; 30.03.2014
comment
Спасибо ♡ Я обновил вопрос, чтобы сделать его полным (r). Я проголосую за ваш ответ, как только у меня будет достаточно репутации. ржу не могу - person Soo Star; 30.03.2014