需要关于OAuthException代码2500的帮助
我正在尝试使用PHP开发Facebook应用程序(apps.facebook.com/some_app),我需要根据用户的音乐兴趣呈现一些信息。 我发现它在“user_likes>游戏”下。
我的问题如下:
$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
if(empty($code) && !isset($_REQUEST['error'])) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
echo("<script> top.location.href='" . $auth_url . "'</script>");
}
$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。
谢谢
迪帕克
错误2500意味着您没有访问令牌或应用程序访问令牌,但正尝试访问/me/
- '我'是'当前用户或页面ID'的占位符,因此如果没有用户的访问令牌页。
要访问用户的喜好列表,您在授权时还需要user_likes
权限
我所见过的应用程序无法交换访问令牌code
的最可能原因是:
redirect_uri
是一个文件夹或服务器根目录,并且缺少一个结尾斜杠(即http://www.example.com
而不是http://www.example.com/
) redirect_uri
您在第一次调用的身份验证对话框中使用是不正是一样的redirect_uri
您在调用中使用exchagne代码为的access_token 如果您的授权流程由于某些其他原因而中断,并且您无法从SDK示例或身份验证文档中找到它,则可能需要一段时间才能有人与您通话,因为您可能会遗漏一些必要的背景知识以了解它们答案
对我来说,我试图用php获得一个auth令牌,并发现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权限
链接地址: http://www.djcxy.com/p/76513.html