Facebook access_token недопустимый?

Я пытаюсь использовать новый График 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

13
задан Kimtho6 11 October 2011 в 14:05
поделиться

6 ответов

здесь то же самое. Я подписался на блог Бена Биддингтона , чтобы получить токен доступа. Та же ошибка при попытке его использовать. Реализация OAuth в Facebook не полностью соответствует спецификации, меня это устраивает, если документ ясен, что, очевидно, здесь не так. Кроме того, было бы неплохо, если бы идентификатор пользователя и имя пользователя возвращались с токеном доступа.

7
ответ дан 1 December 2019 в 21:24
поделиться

Просто чтобы уточнить - после того, как вы позвоните

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/
4
ответ дан 1 December 2019 в 21:24
поделиться

У меня была точно такая же проблема. Пара вещей, которые я сделал для ее решения:

  1. Сначала попробуйте все в браузере, чтобы убедиться, что урлы корректны на каждом этапе
  2. Убедитесь, что урл перенаправления идентичен, а не просто эквивалентен. Параметры в том же порядке, кодировка та же
  3. Не используйте type=client_cred или что-нибудь еще
  4. Кодируйте амперсанды в redirect_url (но не в остальной части url), например, http://example.com/fb?foo=234%26bar=567. Этот пункт вызвал у меня больше всего проблем. Когда запускалась страница обратного вызова, включался только url перед первым амперсандом, поскольку амперсанд считался частью url для graph.facebook.com, не частью redirect_url. Затем я получал значения из строки запроса, чтобы поместить их в redirect_url для второго вызова, но их там не было. Когда я закодировал амперсанды, они появились правильно.
  5. Не имейте пустых значений в кодированных параметрах строки запроса (например, ?foo=%26bar=123)
0
ответ дан 1 December 2019 в 21:24
поделиться

Я хочу указать на то, что вроде как было сказано в блоге Бена Биддингтона, и что я заметил, глядя на "искаженный" 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 - это процесс с двумя запросами.

0
ответ дан 1 December 2019 в 21:24
поделиться

Добавление параметра типа возвращает 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"
2
ответ дан 1 December 2019 в 21:24
поделиться

У меня была такая же проблема только в 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'];
1
ответ дан 1 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: