ОСНОВНАЯ ПРОБЛЕМА: Я хочу, чтобы мое приложение могло совершать вызовы API графа Facebook об авторизованных пользователях, даже если пользователь отсутствует.
Например, я хочу, чтобы пользователь (А) авторизовал приложение, а позже я хочу, чтобы пользователь (Б) мог использовать приложение для просмотра информации о друзьях пользователя (А). Конкретно: поле «работа». Да, я запрашиваю эти расширенные разрешения (user_work_history
, friends_work_history
и т. д.). В настоящее время мое приложение имеет доступ к истории работы друзей вошедшего в систему пользователя, но не к истории работы друзей другихпользователей приложения.
Вот что я уже знаю:
offline_access
к параметру области — это старый способ, и он
больше не работает.Мне нужно обменять обычный токен доступа, чтобы получить новый расширенный токен. В документации 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 не полностью документирован, и я не могу найти примеров того, как это должно работать.