Подтвердить что ты не робот

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"?!

4b9b3361

Ответ 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

Ответ 11

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