API графа Facebook - токен OAuth - PullRequest
       18

API графа Facebook - токен OAuth

26 голосов
/ 23 апреля 2010

Я пытаюсь получить данные с помощью нового 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 Error.

Любая помощь будет принята с благодарностью.


Обновление:

С тех пор я изменил метод с file_get_contents () на curl. Получая заголовки, я получаюследующее сообщение об ошибке ...

{"error":{"type":"OAuthException","message":"Missing client_id"}}

но мой массив записей включает в себя 'client_id'?!

Ответы [ 11 ]

24 голосов
/ 07 октября 2010

Не используйте type = client_cred, это не токен доступа, который пользователь гранты для вашего приложения для использования. Ты не нужен redirect_uri или код или любой утверждение для получения типа client_cred токен доступа.

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

Но хорошо, что ты можешь суффикс ваше состояние для redirect_uri, Важным моментом здесь является то, что URL сайта, который вы указали (который такое redirect_uri)

не должно иметь

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

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

http://www.Redirect.com

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

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

16 голосов
/ 28 апреля 2010

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

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

8 голосов
/ 13 января 2011

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

redirect_uri используется только в качестве перенаправления один раз (в первый раз) для перенаправления обратно на проверяющую сторону с токеном «code».Во второй раз redirect_uri передается обратно серверу авторизации, но на этот раз он не используется, как вы ожидаете (для перенаправления), а используется сервером аутентификации для проверки кода.Сервер отвечает access_token.

http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.5.2

Вы заметите, что в документации на Facebook (что ужасно) написано fetch"Обменяйте его на токен доступа fetching https://graph.facebook.com/oauth/access_token. "

Таким образом, мне не нужно было кодировать или делать что-то особенное для Uri, просто дважды передать один и тот же redirect_uri и получить 2-ю страницу дляполучить access_token внутри.

6 голосов
/ 26 июля 2010

Вы можете запросить токен доступа через терминал (пользователи 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
3 голосов
/ 06 июля 2010

Обратите внимание, что

'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

2 голосов
/ 25 февраля 2012

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

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

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

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

$token = $facebook->getAccessToken();

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

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

спасибо ..

2 голосов
/ 27 апреля 2010

Попробуйте следовать 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>');
0 голосов
/ 25 февраля 2012

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

0 голосов
/ 06 июня 2010

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

0 голосов
/ 08 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...