【问题标题】:Facebook 400 bad request second time I use appFacebook 400 错误请求我第二次使用应用程序
【发布时间】:2012-10-25 01:27:48
【问题描述】:

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

$code = $_REQUEST["code"]; 如果(空($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;

【问题讨论】:

    标签: php facebook


    【解决方案1】:

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

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


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

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

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

    【讨论】:

    • 我已停用 2012 年 12 月的重大更改,但没有任何变化。此外,如果我使用 github 上显示的 php sdk,我会收到错误“”未捕获的 OAuthException:必须使用活动访问令牌来查询有关当前用户的信息”
    • 奇怪的是在桌面浏览器上一切正常——只有在手机上它不工作
    • 唯一的区别:这是我在桌面上使用的redirect_url:$my_url = "facebook.com/pages/MyRadioTestcom/…."".$country."".$token; 这是我在手机上使用的一个:$my_url = 'm.facebook.com/apps/'.$app_id.'/…;
    【解决方案2】:

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

    我发现会话变量可能丢失了

    【讨论】:

    • 抱歉,从上面的代码中删除了 SESSION - 这不会导致错误的请求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2018-12-31
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多