0

我只在移动设备上收到此错误。登录重定向正常工作,用户被正确重定向回应用程序。我没有错误。然后,如果我第二次访问该应用程序(第一次使用后的几秒钟)file_get_contents 会抛出一个 400 错误请求 - 这是代码 - 非常感谢帮助:-)

$code = $_REQUEST["code"]; if(empty($code)) { $my_url = 'https://m.facebook.com/apps/'.$app_id.'/?sid='.$surveyid.'&country='.$country; $dialog_url = "https://www.facebook.com/dialog/oauth?client_id="。$app_id 。“&redirect_uri=”。urlencode($my_url) 。"&scope=user_birthday";

        echo("<script> top.location.href='" . $dialog_url . "'</script>");
        exit();
        }

        $my_url = 'https://m.facebook.com/apps/'.$app_id.'/?sid='.$surveyid.'&country='.$country;
        $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));

        $me['id']=$user->id;
        $me['gender']=$user->gender;
        $me['first_name']=$user->first_name;
        $me['last_name']=$user->last_name;
        $me['birhtday']=$user->birthday;
4

2 回答 2

0

您是否第二次检查会话是否可用?

我看到会话变量可能丢失了

于 2012-11-05T08:22:49.497 回答
0

然后,如果我第二次访问应用程序(第一次使用后的几秒钟)file_get_contents 会抛出 400 错误请求

如果您使用 PHP SDK 而不是“手动”对 API 执行请求,您会收到一个错误消息的异常,该错误消息应该解释正在发生的事情 - 请考虑在未来使用它,它会做很多事情更容易,包括调试。


至于当前的问题,您似乎code每次都在尝试将参数交换为新的访问令牌——但这在未来将不再可能,请参阅https://developers.facebook.com/roadmap/#december -2012,“OAuth 授权码的新安全限制”:

我们将只允许一次将授权代码交换为访问令牌

对于新创建的应用程序,此迁移默认启用 - 您现在可以禁用它,它应该可以按预期工作。但是在 2012 年 12 月 5 日之后,您必须有一个可以工作的解决方案,而无需尝试多次将代码交换为访问令牌。

于 2012-11-05T10:32:35.663 回答