API графиков Facebook - токен OAuth
Я пытаюсь получить данные, используя новый API-интерфейс графика, однако токен, который я извлекаю из OAuth, похоже, не работает.
Вызов, который я делаю, выглядит следующим образом:
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=<app_id>&client_secret=<app secret>');
Это возвращает токен с длиной строки 41. Чтобы дать вам пример того, что возвращается, я предоставил ниже образец (преобразовал все числа в 0, все заглавные буквы в "A" и буквы в малом регистре в "a
access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.
Я беру этот токен доступа и присоединяю его к запросу запроса для данных, он не кажется правильным маркером, поскольку он ничего не возвращает. Я делаю вызов данных следующим образом;
file_get_contents('https://graph.facebook.com/<my_page's_id>/statuses?access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.')
Когда я вручную извлекаю эту страницу непосредственно через браузер, я получаю сообщение об ошибке 500/Internal Server.
Любая помощь была бы чрезвычайно оценена.
Обновление:
С тех пор я изменил метод из file_get_contents() на завиток. Поправив заголовки, я получаю следующее сообщение об ошибке...
{"error":{"type":"OAuthException","message":"Missing client_id"}}
но мой массив сообщений включает "client_id"?!
Ответы
Ответ 1
Не используйте type = client_cred, это не токен доступа, который пользователь гранты для вашего приложения. Вы не нужен redirect_uri или код или любой утверждение типа client_cred токен доступа.
Facebook реализует ранний проект OAuth 2 в это время. Так что нет поддержка "состояния" еще.
Но хорошо, что вы можете суффикс ваше состояние в redirect_uri, важно отметить, что URL-адрес сайта, который вы указали (который является redirect_uri)
не должен иметь
вопросительный знак в конце или в любом месте в том, что вы суффикс как состояние клиента, закодированы или нет. Если вы это сделаете, вы получить страшный "Ошибка проверки код подтверждения"
Не используйте это
http://www.Redirect.com?
Правильный Url http://www.Redirect.com/
Надеюсь, что это поможет.
Ответ 2
Это работает для меня: -)
header('Location: https://graph.facebook.com/oauth/access_token?' . http_build_query(array(
'client_id' => FB_APP_ID,
'type' => 'client_cred',
'client_secret' => FB_SECRET,
'code' => $code)));
Конечно, вы должны использовать file_get_contents и проанализировать токен из ответа
Ответ 3
Я столкнулся с одной и той же проблемой, но оказалось, что проблема заключается не в кодировании параметра redirect_uri, а в том, что у меня была завершающая косая черта или вопросительный знак, просто я передал два разных URL-адреса перенаправления (не прочитал спецификация в это время).
Redirect_uri используется только как переадресация один раз (первый раз), чтобы перенаправить обратно к полагающейся стороне с помощью токена "код". Во второй раз redirect_uri передается обратно на сервер auth, но на этот раз он не используется так, как вы ожидали (перенаправить), а использовался сервером аутентификации для проверки кода. Сервер отвечает access_token.
http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.5.2
Вы заметите, что документация в facebook (что ужасно) говорит fetch "Обменивать ее на токен доступа с помощью выборки https://graph.facebook.com/oauth/access_token.
В общем, мне не нужно было кодировать или делать что-то особенное для Uri, просто переходить в ту же redirect_uri дважды, и извлечь вторую страницу, чтобы получить access_token внутри.
Ответ 4
Вы можете запросить токен доступа через терминал (пользователи OSX) с помощью curl:
curl -F type=client_cred -F client_id=xxxxxxxxxxxxxxx -F client_secret=c0f88xxxxxxxxxxxxxxxxxx1b949d1b8 https://graph.facebook.com/oauth/access_token
После того, как у вас есть токен доступа, вы можете использовать его в будущих запросах curl для внесения изменений через новый API-интерфейс:
Опубликовать сообщение с идентификатором профиля:
curl -F 'access_token=xxxxxxxxxxxxx|mGVx50lxxxxxxxxxxxxhzC2w.' -F 'message=Hello Likers' -F 'id=1250000000000905' https ://graph.facebook.com/feed
Ответ 5
Обратите внимание, что
'type' = > 'client_cred',
- это только способ обойти ниже, сказав, что выше также работает
После того, как пользователь авторизует ваше приложение, мы перенаправляем пользователя обратно в URI перенаправления, который вы указали с помощью строки подтверждения в коде аргумента, которую можно обменять на токен доступа oauth. Замените его на токен доступа, извлекая https://graph.facebook.com/oauth/access_token. Передайте точную ту же самую redirect_uri, что и на предыдущем шаге:
через: by http://developers.facebook.com/docs/api
см. также: http://forum.developers.facebook.net/viewtopic.php?pid=238371
Ответ 6
Попробуйте следовать API, т.е. без type
, но добавьте redirect_uri
и code
(даже если это нам не нужно):
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id=<app_id>&client_secret=<app secret>&redirect_uri=<url>&code=<code>');
Ответ 7
Возможно, ваша проблема решена, но я пока не нашел принятого ответа от вас, и, возможно, этот ответ помогает тем, кто сталкивается с подобной проблемой.
Сначала нам нужно создать экземпляр нашего приложения.
$facebook = new Facebook(array(
'appId' => '149865361795547',
'secret' => 'ee827a8df6202e1857b3fc28f3185a61',
'cookie' => true,
));
простой способ получить access_token
$token = $facebook->getAccessToken();
получить статус страницы по вашему запросу
$response = $facebook->api($pageID . '/feed','get',$token);
спасибо..
Ответ 8
Удостоверьтесь, что URL-адрес вашего URL-адреса закодирован в соответствии с вашими параметрами запроса. Фактически вы должны быть:
000000000000%7CAaaAaaAaaAAaAaaaaAaaAa0aaAA
Примечание: также требуется параметр типа, без него вы также получите сообщение об ошибке 500:
{
"error": {
"type": "OAuthException",
"message": "Error validating verification code."
}
}
а не сообщение, которое вы получаете с другими отсутствующими параметрами. Не вижу, что упоминалось в документации.
Ответ 9
Вы также можете получить эту ошибку, если ваш URL-адрес подключения не является базой вашего URI перенаправления. Например
Connect URL: http://www.example.com/fb/connect/
Redirect URI: http://www.example.com/fb/connect/redirect
Я столкнулся с проблемой, когда мой URL-адрес перенаправления был таким же, как и URL-адрес соединения, но я забыл трейлинг/на URI переадресации, чтобы FB считал их разными и не выполнял авторизацию.
Ответ 10
Извините за размещение в старом вопросе.
Из-за изменений в последнем доступе fb.
У меня этот код работает, и я думал, что я отправлю кому-то еще, кому нужна помощь.
Этот метод отлично работает с jQuery ajax и исключает приведенный пример redirect_uri из facebook.
$ch = curl_init("https://graph.facebook.com/oauth/access_token?client_id=INSERT_YOUR_APP_ID_HERE&client_secret=INSERT_YOUR_APP_SECRET_HERE&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 30000);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);
if ($curl_errno > 0)
{
echo "cURL Error ($curl_errno): $curl_error\n";
}
else
{
echo $data;
}
выводит общедоступный доступ access_token для показа пользователям, не являющимся пользователями. например, на странице facebook, через страницу api для веб-сайтов.
access_token = 191648007534048 | eVilnMh585rlQLZLvBAmqM6s-1g
php facebook oauth2 facebook-accesstoken facebook-oauth
Ответ 11
вам нужно ввести фактические значения вместо < app_id > и секретное значение.
код является уникальным значением, которое необходимо создать, и URL-адрес перенаправления, который вы предоставите, будет проверять правильность кода.