Facebook PHP SDK: получение «долгоживущего» токена доступа теперь, когда «offline_access» устарел

ОСНОВНАЯ ПРОБЛЕМА: Я хочу, чтобы мое приложение могло совершать вызовы API графа Facebook об авторизованных пользователях, даже если пользователь отсутствует.

Например, я хочу, чтобы пользователь (А) авторизовал приложение, а позже я хочу, чтобы пользователь (Б) мог использовать приложение для просмотра информации о друзьях пользователя (А). Конкретно: поле «работа». Да, я запрашиваю эти расширенные разрешения (user_work_history, friends_work_historyи т. д.). В настоящее время мое приложение имеет доступ к истории работы друзей вошедшего в систему пользователя, но не к истории работы друзей другихпользователей приложения.

Вот что я уже знаю:

  • Добавление offline_accessк параметру области — это старый способ, и он больше не работает.
  • Новый способ — «долгоживущие» токены доступа, описано здесь. Они длятся 60 дней.
  • Мне нужно обменять обычный токен доступа, чтобы получить новый расширенный токен. В документации FB говорится:

    https://graph.facebook.com/oauth/access_token?
    client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN

Вот чего я не знаю (и надеюсь, вы мне подскажете): Как получить расширенный (он же «долгоживущий») токен доступа с помощью Facebook PHP SDK? В настоящее время мой код выглядит следующим образом:

$facebook->getAccessToken();

Есть ли что-то подобное?:

$facebook->getExtendedAccessToken();

Если нет, то это то, что я должен делать?

$accessToken = $facebook->getAccessToken();
$extendedAccessToken = file_get_contents("https://graph.facebook.com/oauth/access_token?             
    client_id={$appId}&
    client_secret={$secret}&
    grant_type=fb_exchange_token&
    fb_exchange_token={$accessToken}"
    );

Я пробовал, не работает. Я получаю эту ошибку:

Warning: file_get_contents(https://graph.facebook.com/oauth/access_token? client_id=#######& client_secret=#########& grant_type=fb_exchange_token& fb_exchange_token=##########) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /...

Работает ли это по-другому, если я переключаюсь на FQL вместо графического API? Я много раз читал документацию Facebook, но PHP sdk не полностью документирован, и я не могу найти примеров того, как это должно работать.

15
задан Benjamin 17 May 2014 в 23:26
поделиться