Php 如何通过facebook认证以编程方式获取用户数据?

Php 如何通过facebook认证以编程方式获取用户数据?,php,facebook,facebook-authentication,Php,Facebook,Facebook Authentication,我可以手动获取用户的数据,但不能编程 使用服务器端代码(原样),从- PHP版本=5.2.9 错误报告处于关闭状态,但将其包含在代码-Error_reportingE_ALL中;没有输出。 更新-所以,我尝试了6个月后,它的工作。唯一改变的是我的主机。我以前用过HostBig。教训-不要依赖每月1美元的托管服务,它们是不可信任的。您正在尝试从本地主机运行此代码吗?如果是的话,它就不起作用了。在facebook上注册应用程序时,您必须已进入应用程序的网站。将脚本上传到服务器上,编辑你的应用程序id

我可以手动获取用户的数据,但不能编程

使用服务器端代码(原样),从-

PHP版本=5.2.9 错误报告处于关闭状态,但将其包含在代码-Error_reportingE_ALL中;没有输出。
更新-所以,我尝试了6个月后,它的工作。唯一改变的是我的主机。我以前用过HostBig。教训-不要依赖每月1美元的托管服务,它们是不可信任的。

您正在尝试从本地主机运行此代码吗?如果是的话,它就不起作用了。在facebook上注册应用程序时,您必须已进入应用程序的网站。将脚本上传到服务器上,编辑你的应用程序id、密码和脚本的url。然后尝试执行它


如果即使在那时也不起作用,那么尝试回显您的$dialog\u url和$token\u url。首先在浏览器中手动复制粘贴您的$dialog\u url,并查看它会出现什么错误。如果它要求验证,请验证您的应用程序。它会让你回到页面。然后尝试在浏览器中运行$token\u url。它将为您提供服务器为您提供的准确响应。

因此,我在6个月后尝试了这一方法,并且成功了。唯一改变的是我的主机。我以前用过HostBig

HostBig的PHP配置可能有问题,它禁用了文件的内容


更新-我和主机大人物谈过,他们告诉我,出于安全考虑,他们已经禁用了allow_url_fopen,并建议使用cURL作为更安全的选择。

Hrm,您在没有@的情况下尝试过吗?这就是抑制错误。我过去对文件内容的一个问题是,当响应头包含错误时,它不会提供实际的Web服务器响应数据。然而,浏览器通常会显示响应。这并不能使调试变得更容易。@finity我在没有“@”的情况下尝试过。事实上,在几个小时的时间跨度内,我已经尝试了许多这种代码的排列/组合!什么都不管用。我可以避免使用file\u get\u contents函数,而使用其他函数吗?是的,可以使用curl-。几个月前,我写了一个Facebook应用程序,并花了很长时间调试它。Facebook曾一度停止响应我的查询,几天后我发现这是一个bug,可能会攻击100名开发人员。非常令人沮丧。你使用的身份验证方案与我的不同——我的身份验证方案以画布应用程序的形式运行,因此每次用户查看我的页面时,Facebook都会向我发送访问令牌。file\u get\u内容对我来说很好,但也许curl可以为您提供更多有用的调试信息。我正在服务器上运行。就像我说的,当我回显$token_url并将其粘贴到地址栏时,我得到了令牌和到期时间。我还使用该令牌以同样的方式从图表中获取信息。
 <?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.");
 }

 ?>
   $response = @file_get_contents($token_url);