Facebook 400错误请求第二次我使用应用程序

时间:2012-11-05 08:16:02

标签: php facebook

我只在移动设备上收到此错误消息。重定向到登录正常工作,用户被正确地重定向回应用程序。我没有错。然后,如果我第二次访问该应用程序(第一次使用后几秒),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)。 “&安培;范围= 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;

2 个答案:

答案 0 :(得分:0)

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

我看到会话变量可能缺失

答案 1 :(得分:0)

  

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

如果您使用PHP SDK而不是“手动”对API执行请求,那么您将得到一个异常,其中包含一条错误消息,该消息应该已经解释了正在发生的事情 - 请考虑将来使用它,它会使很多事情都比较容易,包括调试。


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

  

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

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