Нужна помощь по OAuthException Code 2500

Я пытаюсь разработать приложение Facebook (apps.facebook.com/some_app), используя PHP, где мне нужно представить некоторую информацию на основе интересов пользователя. Я нашел, что это под "user_likes> games".

Мои проблемы заключаются в следующем:

  • Чтобы получить доступ, я применил метод oauth dialog, предложенный в API на моей индексной странице.

$auth_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($canvas_page) ."&scope=user_likes"; 
  • После успешной авторизации я возвращаюсь на индексную страницу с «кодом» в качестве параметров.

 http://MY_CANVAS_PAGE/?code=some base64 encoded letters 
  • Во-первых, я не знаю, нужен ли мне access_token для того, чтобы читать музыкальные интересы пользователя, но я попробовал все предложенные методы. Я не мог продвинуться с этой точки
  • У меня такой код (на моей индексной странице), который перенаправляет для авторизации, если параметры кода не установлены.

 if(empty($code) && !isset($_REQUEST['error'])) { $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection echo("<script> top.location.href='" . $auth_url . "'</script>"); } 
  • В настоящее время я просто пытаюсь получить здесь публичную информацию пользователя, но без успеха. Я попробовал метод signed_request, как это было предложено, но без успеха

 $signed_request = $_REQUEST["signed_request"]; list($encoded_sig, $payload) = explode('.', $signed_request, 2); $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); echo ("Welcome User: " . $data["user_id"]); 
  • Также попробовал код, найденный в http://developers.facebook.com/blog/post/500/

    но я получаю ошибку при попытке получить информацию об отладке, используя


 print_r($decoded_response); 

 stdClass Object ( [error] => stdClass Object ( [message] => An active access token must be used to query information about the current user. [type] => OAuthException [code] => 2500 ) ) 

Чтобы получить общедоступную информацию пользователя, я также попробовал предложенный пример в PHP SDK


 $facebook = new Facebook(array( 'appId' => MY_APP_ID, //registered facebook APP ID 'secret' => MY_SECRET, //secret key for APP )); $fb_user = $facebook->getUser(); if($fb_user){ try { $user_profile = $facebook->api('/me'); echo $user_profile['email']; } catch(FacebookApiException $e) { $fb_user = null; } } 

Но успеха нет. Может кто-нибудь объяснить мне, почему я получаю эту ошибку и как правильно получить доступ к музыке пользователя. Возможно, я неправильно понял API.

благодаря

Дипак

Solutions Collecting From Web of "Нужна помощь по OAuthException Code 2500"

Ошибка 2500 означает, что у вас нет токена доступа или токена доступа к доступу, но вы пытаетесь получить доступ /me/ – 'me' является заполнителем для «текущего пользователя или идентификатора страницы», поэтому не будет действителен без токена доступа для пользователя или стр.

Чтобы получить доступ к списку пользователей, вам также понадобится разрешение user_likes при авторизации их

Наиболее вероятными причинами, которые я видел для приложений, которые не могут обменять code для токена доступа, являются:

  1. Используемый вами redirect_uri относится к корню папки или сервера и не имеет завершающей косой черты (т.е. это http://www.example.com вместо http://www.example.com/ )
  2. redirect_uri вы использовали при первом вызове в диалоговом окне auth, не была точно такой же, как redirect_uri вы использовали в вызове, чтобы обменять код на access_token

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

Для меня я пытался получить токен аутентификации с php и выяснил, что ошибка 2500 была вызвана проблемой с file_get_contents ничего не возвращал. Я мог получить доступ к URL-адресу в моем браузере, но не с помощью file_get_contents . Я исправил его, используя CURL вместо этого, как описано здесь: https://stackoverflow.com/a/6325313 .

В результате я использовал код из https://developers.facebook.com/docs/authentication/server-side/ и заменил строку:

 $response = file_get_contents($token_url); 

с

 $ch = curl_init($token_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); 

Поэтому стало:

  $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($redirect_url) . "&client_secret=" . $app_secret . "&code=" . $code; /* Facebook say to use this, but file_get_contents isn't working! $response = file_get_contents($token_url,null, $val); */ // Use this as an alternative $ch = curl_init($token_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); // From https://developers.facebook.com/docs/authentication/server-side/ $params = null; parse_str($response, $params); $access_token = $params['access_token']; 

попробуйте этот код

 $code = $_REQUEST["code"]; if(empty($code)) { $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) ; echo("<script>top.location.href='" . $dialog_url . "'</script>"); } $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code; $response = file_get_contents($token_url); $params = null; parse_str($response, $params); $access_token = $params['access_token']; 

PS: адрес электронной почты пользователя не является общедоступной информацией, и для этого вам необходимо разрешение пользователя user_email

Я решил свою проблему благодаря https://developers.facebook.com/blog/post/534/

Я просто скопировал образец и вставил его в свой скрипт. Он полностью подходит. Это своего рода гибридное использование PHP и Javascript.