我可以手动获取用户的数据,但不能以编程方式获取。
使用服务器端代码,原样来自 - https://developers.facebook.com/docs/authentication/
<?php
$app_id = "MY_APP_ID";
$app_secret = "MY_APP_SECRET";
$my_url = "ADDRESS_OF_CURRENT_PAGE";
session_start();
$code = $_REQUEST["code"];
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state']) {
$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);
$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
}
else {
echo("The state does not match. You may be a victim of CSRF.");
}
?>
输出只有Hello,用户名不显示!
我认为问题在于file_get_contents(),因为echo-ing $ response没有输出,其中$ token_url具有适当的值。
$response = @file_get_contents($token_url);
更新 - 所以,我在6个月后尝试了这个,并且它有效。从那以后唯一改变的是我的托管。我之前使用的是HostBig。 课程 - 不依赖于1美元/月的托管服务,它们无法信任。
答案 0 :(得分:0)
您是否尝试从localhost运行此代码?如果是的话,那就不行了。在Facebook上注册您的应用程序时,您必须已进入应用程序的网站。在服务器上上传脚本,编辑app_id,secret和脚本url。然后尝试执行它。
如果它不起作用,请尝试回显您的$dialog_url
和$token_url
。首先手动复制粘贴浏览器中的$dialog_url
并查看它给出的错误。如果要求身份验证,请对您的应用进行身份验证。它会让你回到页面。然后尝试在浏览器中运行$token_url
。它将为您提供服务器为您提供的确切响应。
答案 1 :(得分:0)
所以,我在6个月后尝试了这个,并且它有效。从那以后唯一改变的是我的托管。我之前使用的是HostBig。
HostBig的PHP配置可能有问题,它禁用了file_get_contents()。
更新 - 我和HostBig的人谈过,他们告诉我他们已经禁用了allow_url_fopen,出于安全考虑,并建议将cURL作为更安全的选择。