API графиков Facebook - Маркер OAuth
Я пытаюсь получить данные с помощью нового API graph, однако токен, который я извлекаю из 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, все заглавные буквы в "А" и строчные буквы в "а"
access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.
Я беру этот маркер доступа и прикрепляю его к запросу на вызов для данные, похоже, это не правильный токен, так как он ничего не возвращает. Я выполняю вызов данных следующим образом;
file_get_contents('https://graph.facebook.com/<my_page's_id>/statuses?access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.')
Когда я вручную извлекаю эту страницу непосредственно через браузер, я получаю сообщение об ошибке 500/Внутренний сервер.
Любая помощь будет признательна с благодарностью.
Обновление:
С тех пор я изменил метод с file_get_contents() на curl. Возвращая заголовки, я получаю следующее сообщение об ошибке...
{"error":{"type":"OAuthException","message":"Missing client_id"}}
Но мой массив сообщений включает "идентификатор клиента"?!
11 answers
Не используйте type=client_cred, это не маркер доступа, который пользователь предоставляет для использования вашим приложением. Вам не нужно перенаправлять_uri или код или какое-либо утверждение, чтобы получить маркер доступа типа client_cred.
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 используется в качестве перенаправления только один раз (в первый раз) для перенаправления обратно проверяющей стороне с помощью токена "код". Во 2-й раз, redirect_uri передается обратно на сервер аутентификации, но на этот раз он используется не так, как вы ожидаете (для перенаправления), а используется сервером аутентификации для проверки кода. Сервер отвечает с помощью 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 и извлеките 2-ю страницу, чтобы получить 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 graph:
Отправьте сообщение на идентификатор профиля:
curl -F 'access_token=xxxxxxxxxxxxx|mGVx50lxxxxxxxxxxxxhzC2w.' -F 'message=Hello Likers' -F 'id=1250000000000905' https ://graph.facebook.com/feed
Пожалуйста, обратите внимание, что
'тип'=> 'клиент_кред',
- это всего лишь способ обойти нижеприведенное, сказав, что вышесказанное также работает
После того, как пользователь авторизует ваше приложение, мы перенаправляем пользователя обратно на указанный вами 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-адрес, закодированный в параметрах вашего запроса, на самом деле он должен быть:
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
Я столкнулся с проблемой, когда мой URI перенаправления совпадал с 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. т.е. стена ленты страниц facebook через api graph для веб-сайтов. access_token=191648007534048|evilnmh585rlqlzlvbamqm6s-1g доступ_токен=191648007534048/evilnmh585rlqlzlvbamqm6s-1g
Вам нужно ввести фактические значения вместо