Я пытаюсь использовать новый График API Facebook, недавно выпущенный, но я, может казаться, не заставляю его работать правильно.
Я прошел шаги, и после того, как / авторизовывают вызов, я получаю access_token:
access_token=109002049121898|nhKwSTJVPbUZ5JYyIH3opCBQMf8.
Когда я пытаюсь использовать тот маркер, я добираюсь:
{
"error": {
"type": "QueryParseException",
"message": "An active access token must be used to query information about the current user."
}
}
Я озадачен как также почему...
- AC
здесь то же самое. Я подписался на блог Бена Биддингтона , чтобы получить токен доступа. Та же ошибка при попытке его использовать. Реализация OAuth в Facebook не полностью соответствует спецификации, меня это устраивает, если документ ясен, что, очевидно, здесь не так. Кроме того, было бы неплохо, если бы идентификатор пользователя и имя пользователя возвращались с токеном доступа.
Просто чтобы уточнить - после того, как вы позвоните
https://graph.facebook.com/oauth/authorize?
, вы должны получить КОД, который вместе с вашими CLIENT_ID и CLIENT_SECRET (при условии, что вы зарегистрировали свое приложение ) можно обменять на access_token по адресу
https://graph.facebook.com/oauth/access_token?
. Если это действительно то, как вы получили ACCESS_TOKEN, тогда вы сможете запросить
https://graph.facebook.com/me/
У меня была точно такая же проблема. Пара вещей, которые я сделал для ее решения:
Я хочу указать на то, что вроде как было сказано в блоге Бена Биддингтона, и что я заметил, глядя на "искаженный" access_token в начальном вопросе. Другие говорили похожие вещи в этой беседе, но я хочу быть явным.
Маркер на самом деле не имеет неправильной формы, это скорее токен, который позволяет вам выполнять действия от имени приложения, а не пользователя. Это токен, который вы бы использовали, если хотите получить всех пользователей приложения или просмотреть аналитическую информацию о своем приложении и т. Д. С запросами, обычно поступающими с вашего сервера, а не с клиента. Этот тип токена получается с помощью параметра type = client_cred. Если вы хотите делать что-то от имени пользователя, не указывайте type = client_cred и убедитесь, что вы указали следующие параметры при вызове http://graph.facebook.com/oauth/access_token :
'client_id' => APP_ID
'redirect_uri' => REDIRECT_URI
'client_secret' => APP_SECRET
'code' => $_GET['code']
Я написал это как пары "ключ-значение" массива PHP, но я думаю, что вы поняли суть. Значение кода GET получается после первоначального вызова http://graph.facebook.com/oauth/authorize со следующими параметрами:
'client_id' => APP_ID
'redirect_uri' => "http://your.connect.url/some/endpoint"
Надеюсь, это поможет! В документах Facebook говорится, но не очень хорошо, что получение access_token - это процесс с двумя запросами.
Добавление параметра типа возвращает auth_token для уровня приложения, поэтому его лучше опустить. После бесчисленных попыток и комбинаций у меня сработало использование того же параметра redirect_url
в вызове / oath / access_token
, который использовался в вызове / oath / авторизовать
.
Итак, полная последовательность авторизации вашего приложения от чьего-либо имени:
1. позвонить или перенаправить на:
"https://graph.facebook.com/oauth/authorize?client_id=" + my_clientId + "&scope=publish_stream,offline_access,manage_pages" + "&redirect_uri=" + "http://my_redirect_url?blah"
2. на странице, расположенной по адресу return_url
выше, отправьте запрос или что-нибудь еще по этому URL-адресу:
"https://graph.facebook.com/oauth/access_token?client_id=" + client_id + "&client_secret=" + secret + "&code=" + Request.QueryString["code"] + "&redirect_uri=" + "http://my_redirect_url?blah"
У меня была такая же проблема только в IE8. Решением для меня была отправка access_token в запросе API. Что-то вроде этого:
FB.api('/me/friends?access_token=<YOUR TOKEN>
Я получил свой токен через PHP следующим образом:
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => '<API_ID>',
'secret' => '<SECRET>',
'cookie' => false,
));
$session = $facebook->getSession();
$token = $session['access_token'];