Lar*_*eep 9 php facebook facebook-graph-api facebook-apps facebook-access-token
我正在尝试使用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";
Run Code Online (Sandbox Code Playgroud)
http://MY_CANVAS_PAGE/?code=some base64 encoded letters
Run Code Online (Sandbox Code Playgroud)
if(empty($code) && !isset($_REQUEST['error'])) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
echo("<script> top.location.href='" . $auth_url . "'</script>");
}
Run Code Online (Sandbox Code Playgroud)
$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"]);
Run Code Online (Sandbox Code Playgroud)
还尝试了http://developers.facebook.com/blog/post/500/中的代码
但是在尝试使用调试信息时遇到错误
print_r($decoded_response);
Run Code Online (Sandbox Code Playgroud)
stdClass Object ( [error] => stdClass Object ( [message] => An active
access token must be used to query information about the current user.
[type] => OAuthException [code] => 2500 ) )
Run Code Online (Sandbox Code Playgroud)
为了获得用户的公开信息,我还尝试了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;
}
}
Run Code Online (Sandbox Code Playgroud)
但没有成功.有人可以解释我为什么会收到此错误以及如何正确访问用户的音乐兴趣.可能我误解了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示例或身份验证文档中找到它,那么可能需要一段时间让某人与您交谈,因为您可能缺少了解他们所需的一些背景知识答案
试试这个代码
$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'];
Run Code Online (Sandbox Code Playgroud)
PS:用户电子邮件地址不是公开信息,您需要 user_email 权限才能使用
| 归档时间: |
|
| 查看次数: |
19355 次 |
| 最近记录: |