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"}}

Но мой массив сообщений включает "идентификатор клиента"?!

Author: Michael Mrozek, 2010-04-23

11 answers

Не используйте type=client_cred, это не маркер доступа, который пользователь предоставляет для использования вашим приложением. Вам не нужно перенаправлять_uri или код или какое-либо утверждение, чтобы получить маркер доступа типа client_cred.

Facebook реализует ранний проект OAuth 2 в это время. Так что поддержки "государству" пока нет.

Но приятно, что вы можете добавить свое состояние в redirect_uri, здесь важно отметить, что URL- адрес сайта, который вы указанный (который является redirect_uri)

Не должно быть

Вопросительный знак в конце или где -либо в том, что вы обозначаете как состояние клиента, закодированное или нет. Если вы это сделали, вы получите страшную "Ошибку при проверке кода подтверждения"

Не используйте так

Http://www.Redirect.com?

Правильный Url-адрес http://www.Redirect.com/

Надеюсь, это поможет.

 24
Author: PrateekSaluja, 2010-10-07 08:31:24

Это работает для меня:-)

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 и проанализировали токен из ответа

 16
Author: phpslacker, 2010-06-26 18:09:34

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

 8
Author: Francis Shanahan, 2011-01-13 02:46:52

Вы можете запросить маркер доступа через терминал (пользователи 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
 6
Author: Volcanic, 2010-08-14 23:21:21

Пожалуйста, обратите внимание, что

'тип'=> 'клиент_кред',

- это всего лишь способ обойти нижеприведенное, сказав, что вышесказанное также работает

После того, как пользователь авторизует ваше приложение, мы перенаправляем пользователя обратно на указанный вами 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

 3
Author: Martin, 2012-01-13 11:42:14

Попробуйте следовать 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>');
 2
Author: Mars Zhu, 2010-08-14 23:21:08

Возможно, ваша проблема решена, но я еще не нашел приемлемого ответа от вас, и, возможно, этот ответ поможет тем, кто сталкивается с подобной проблемой

Сначала мы должны создать наш экземпляр приложения.

$facebook = new Facebook(array(
  'appId' => '149865361795547',
  'secret' => 'ee827a8df6202e1857b3fc28f3185a61',
  'cookie' => true,
)); 

Простой способ получить access_token

$token = $facebook->getAccessToken();

Получите статус страницы, как вы задаете в своем вопросе

$response = $facebook->api($pageID . '/feed','get',$token);

спасибо..

 2
Author: Danish Iqbal, 2012-02-25 08:14:41

Убедитесь, что у вас есть URL-адрес, закодированный в параметрах вашего запроса, на самом деле он должен быть:

000000000000%7CAaaAaaAaaAAaAaaaaAaaAa0aaAA

Примечание: также, по-видимому, требуется параметр типа, без него вы также получите сообщение об ошибке 500 с сообщением:

{
   "error": {
   "type": "OAuthException",
   "message": "Error validating verification code."
   }
}

, А не сообщение, которое вы получаете с другими отсутствующими параметрами. Не могу видеть, что упомянуто в документации.

 0
Author: user242766, 2010-04-23 13:06:41

Вы также можете получить эту ошибку, если ваш URL-адрес подключения не является базой вашего URI перенаправления. Например

Connect URL: http://www.example.com/fb/connect/

Redirect URI: http://www.example.com/fb/connect/redirect

Я столкнулся с проблемой, когда мой URI перенаправления совпадал с URL-адресом подключения, но я забыл конечный /на URI перенаправления, поэтому FB увидел их как разные и не прошел проверку подлинности.

 0
Author: Jeremy Raymond, 2010-05-08 01:22:55

Извините за публикацию в старом вопросе. В связи с изменениями в недавнем доступе к 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

Phpfacebookoauth2facebook-accesstokenfacebook-oauth

 0
Author: Damien Keitel, 2012-02-25 07:08:25

Вам нужно ввести фактические значения вместо и секретное значение. код представляет собой уникальное значение, которое вам необходимо сгенерировать, и указанный вами URL-адрес перенаправления затем подтвердит правильность кода.

 -6
Author: Yosi Oren, 2010-06-06 14:26:01