Я пытаюсь получить данные, используя новый 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» ?!
Не используйте type = client_cred, это не токен доступа, который пользователь предоставляет для вашего приложения. Для получения токена доступа типа client_cred вам не требуется redirect_uri или код или любое одобрение.
В настоящее время Facebook реализует ранний проект OAuth 2. Таким образом, пока не поддерживается «государство».
Но хорошо, что вы можете суффиктировать свое состояние на redirect_uri, важно отметить, что URL-адрес сайта, который вы указали (который является redirect_uri)
не должны иметь
вопросительный знак в конце или где-либо в том, что вы суффикс как состояние клиента, закодировано или нет. Если вы это сделаете, вы получите страшный «код проверки подлинности ошибки»,
Не используйте так
Правильный URL: http://www.Redirect.com/
Надеюсь, поможет.
Это работает для меня 🙂
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 и проанализировать токен из ответа
Я столкнулся с одной и той же проблемой, но оказалось, что проблема заключается не в кодировании параметра 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 (что ужасно) говорит: «Замените его для токена доступа, извлекая https://graph.facebook.com/oauth/access_token ».
В общем, мне не нужно было кодировать или делать что-то особенное для Uri, просто переходите к тому же redirect_uri дважды, и заберите вторую страницу, чтобы получить access_token внутри.
Вы можете запросить токен доступа через терминал (пользователи 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
Обратите внимание, что
'type' => 'client_cred',
это только способ обойти ниже, сказав, что вышеупомянутое также работает
После того, как пользователь авторизует ваше приложение, мы перенаправляем пользователя обратно на URI перенаправления, который вы указали с помощью строки подтверждения в коде аргумента, которую можно обменять на токен доступа oauth. Замените его для токена доступа, извлекая https://graph.facebook.com/oauth/access_token . Передайте то же самое redirect_uri, что и на предыдущем шаге:
через: http://developers.facebook.com/docs/api Смотри также: http://forum.developers.facebook.net/viewtopic.php?pid=238371
Попытайтесь следовать 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>');
Возможно, ваша проблема решена, но я пока не нашел приемлемого ответа от вас, и, возможно, этот ответ помогает тем, кто сталкивается с подобной проблемой
Сначала мы должны создать экземпляр нашего приложения.
$facebook = new Facebook(array( 'appId' => '149865361795547', 'secret' => 'ee827a8df6202e1857b3fc28f3185a61', 'cookie' => true, ));
простой способ получить access_token
$token = $facebook->getAccessToken();
получить статус страницы, как вы задаете в своем вопросе
$response = $facebook->api($pageID . '/feed','get',$token);
благодаря..
Удостоверьтесь, что URL-адрес вашего URL-адреса закодирован для ваших параметров запроса, и на самом деле вы должны:
000000000000%7CAaaAaaAaaAAaAaaaaAaaAa0aaAA
Примечание: также требуется параметр типа, без него вы также получите сообщение об ошибке 500:
{ "error": { "type": "OAuthException", "message": "Error validating verification code." } }
а не сообщение, которое вы получаете с другими отсутствующими параметрами. Не могу видеть, что указано в документации .
Вы также можете получить эту ошибку, если ваш URL-адрес подключения не является базой вашего URI перенаправления. Например
Connect URL: http://www.example.com/fb/connect/ Redirect URI: http://www.example.com/fb/connect/redirect
Я столкнулся с проблемой, когда мой URL-адрес перенаправления был таким же, как и URL-адрес подключения, но я забыл трейлинг / на URI переадресации, чтобы FB считал их разными и не выполнял авторизацию.
Извините за размещение в старом вопросе. Из-за изменений в последнем доступе 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
вам нужно ввести фактические значения вместо <app_id> и секретное значение. код является уникальным значением, которое необходимо создать, и указанный URL-адрес перенаправления будет проверять правильность кода.