0

このエラーはモバイル デバイスでのみ発生します。ログインへのリダイレクトは正しく機能し、ユーザーはアプリに正しくリダイレ​​クトされます。エラーは発生しません。次に、アプリに 2 回目にアクセスすると (最初の使用から数秒後)、file_get_contents が 400 の不正な要求をスローします。コードは次のとおりです。

$code = $_REQUEST["コード"]; 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

セッションが 2 回目に利用可能かどうかを確認しましたか?

セッション変数が欠落している可能性があります

于 2012-11-05T08:22:49.497 に答える
0

次に、アプリに 2 回目 (最初の使用から数秒後) にアクセスすると、file_get_contents は 400 の不正な要求を返します。

API に対して「手動で」リクエストを行う代わりに PHP SDK を使用していた場合、何が起こっているのかを説明するエラー メッセージとともに例外を受け取ることになります。将来的に使用することを検討してください。デバッグを含めて簡単に。


現在の問題については、codeパラメータを毎回新しいアクセス トークンに交換しようとしているようですが、これは将来的には不可能になります。https://developers.facebook.com/roadmap/#decemberを参照してください。 -2012、「OAuth 認証コードの新しいセキュリティ制限」:

認証コードをアクセス トークンと交換できるのは 1 回だけです

新しく作成されたアプリの場合、この移行はデフォルトで有効になっています。現時点では無効にすることができ、期待どおりに機能するはずです。しかし、2012 年 12 月 5 日以降は、アクセス トークンのコードを何度も交換しなくても機能するソリューションが必要になります。

于 2012-11-05T10:32:35.663 に答える