Facebook API 400 Bad Request

3

我正在尝试使用Facebook API来运行一个FQL查询。我在PHP中设置好了所有内容,以下是代码:

  $app_id = 'APP_ID';
  $app_secret = 'APP_secret';
  $my_url = "url.com/facebook.php";


  $code = $_REQUEST["code"];

 //auth user
 if(empty($code)) {
    $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' 
    . $app_id . '&redirect_uri=' . urlencode($my_url) ;
    echo("<script>top.location.href='" . $dialog_url . "'</script>");
  }

  //get user access_token
  $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
    . $app_id . '&redirect_uri=' . urlencode($my_url) 
    . '&client_secret=' . $app_secret 
    . '&code=' . $code;
  $access_token = file_get_contents($token_url);


  // Run fql query
  $fql_query_url = 'FQL_Query';
  $fql_query_result = file_get_contents($fql_query_url);
  $fql_query_obj = json_decode($fql_query_result, true);

使用上面的代码一切正常,但最近我决定改变URL结构,不再通过url.com/facebook.php访问页面,而是通过url.com/#facebook访问。

当我将$my_url变量更改为新的URL时,出现了以下错误。

[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

有什么想法吗?谢谢!

1
我投票将此问题标记为不相关,因为FQL已经在多年前被移除,而社区机器人也已经提醒过了它。 - ceejayoz
2个回答

0
我在XAMPP中解决了这个问题,方法是在xampp/php/php.ini文件中添加extension=php_openssl.dll。 在某些版本的XAMPP中,这一行被注释掉了,像这样:;extension=php_openssl.dll, 所以只需取消注释并重新启动Apache即可。

0

好的,让我们从Facebook应用程序设置开始。在应用程序设置中,您定义了“Canvas URL”,如果您决定更改它,那么不仅需要在代码中进行更改,还需要在开发者应用程序的应用程序设置中进行更改。

另一件事是,如果Facebook使用URL调用您的页面,那么在进行身份验证时,您必须在redirect_uri参数中使用完全相同的URL,文档中有说明(http://developers.facebook.com/docs/authentication/)。关于redirect_uri,他们写道:

redirect_uri必须位于您在开发者应用程序的摘要选项卡中的网站部分指定的Site URL路径中。如果它是域的根目录,则应以斜杠结尾。请注意,您的redirect_uri不能是重定向器。

并且

为了对您的应用程序进行身份验证,您必须将授权代码和您的应用程序密钥传递给Graph API令牌端点 - 与上述完全相同的redirect_uri一起 - 在https://graph.facebook.com/oauth/access_token

现在,你决定把URL更改为带有哈希(#)的形式不是一个好主意。这部分URL并不适用于你尝试使用它的目的。只需谷歌“URL中的哈希部分”并阅读一下。


谢谢您的回复。我需要在我的URL中使用哈希,因为我不能让用户刷新页面,否则我存储的一些数据将会丢失。我尝试了上面提到的所有方法都没有成功。Facebook允许在URL中使用哈希吗? - user1210772
最近几天我遇到了一些问题,发现使用file-get-contents方法会导致问题...请查看:https://dev59.com/_lnUa4cB1Zd3GeqPeNFR和http://stackoverflow.com/questions/9333139/facebook-auth-with-high-traffic-sites-empty-access-tokens-empty-me#comment11778884_9333139。除了这个问题,我强烈建议您不要将哈希用于服务器问题。它应该仅用于客户端功能。 - Nitzan Tomer
谢谢您的回复。我已经阅读了您发送给我的链接,但仍然有些迷茫。 - user1210772
我不保证什么,但看起来file_get_contents不是最好的选择。在我发送的第一个链接中,他们展示了如何用另一种替代方法curl来代替这种方法的使用。尝试使用它,看看是否可以解决你的问题。 - Nitzan Tomer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接