0

次のコードを使用してFacebookアクセストークンを取得しようとしています。以前に独自の関数を作成しましたが、同じエラーが返され、何が問題なのか理解できません。

function getAccessToken(){
        $app_id = FB_APP_ID;
        $app_secret = FB_SECRET_ID;
        $my_url = FB_PAGE_URL;
        $code = $_REQUEST["code"];   


        if(empty($code)) {
       $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
       $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
         . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
         . $_SESSION['state'];

       echo("<script> top.location.href='" . $dialog_url . "'</script>");
     }      
    if($_REQUEST['state'] == $_SESSION['state']) {
       $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));
       echo("Hello " . $user->name);
     }
     else {
       echo("The state does not match. You may be a victim of CSRF.");
     }
}

サーバー側認証から取得しましたが、このエラーが発生し続けます:

    Warning: file_get_contents(https://graph.facebook.com/oauth/access_token?
client_id=ID HERE&redirect_uri=URLHERE&cli
ent_secret=SECRECT&code=AQCI5rNgw9zCPHWGozeT59asg7_022u5tVc5XSef49BiX
IaF5_MAMqFwsqOAquUHgjOu_99ONwUV6IC7k-jV6DsWf9ni3jm8t59aHCBp1jrFaDthPbIKLNLQ-
fZgB5MLh1le5BAPKj_l57jhTLTBfOdxRU30mFCMYzMch8MYFpCmJ9GrjSSGwt0OKb_LNqMoRf8) [function.file-
get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

誰もが修正を知っていますか?

4

3 に答える 3

0

file_get_contents作成しているURLは問題ないように見えるため、メソッドに問題がある可能性があります。

検索する"facebook file_get_contents failed to open stream"と、この問題についてかなりの数の結果が得られます。ここでは、スタックオーバーフローについて多くの結果が得られます。このスレッド
のas状態に関するHTTPSの問題のようです: [function.file-get-contents]:ストリームを開くことができませんでしたfile_get_contents

たぶん、httpリクエストを発行する他の方法を試してみてください。多分カール?
物事をテストするために、phpスクリプトで試したのと同じURLでコマンドラインからcurlを使用して、何が得られるかを確認してください。

于 2012-05-28T14:53:39.327 に答える
0

要求応答を見ると、Facebookアプリケーションの設定が定義されていません。

を使用していてFB_APP_ID、トークンをリクエストするFB_SECRET_IDFB_PAGE_URL、応答でこれらがそれぞれ「ID HERE」、「SECRECT」、「URLHERE」として定義されていることがわかります。

于 2012-05-28T15:06:42.453 に答える
0

私はPHPSDKを使用してこの問題を修正し、SDKとの長い戦いの末、私が望んでいたことを実行できるようにしました。

同じ考えで別の問題を抱えた別の質問も開きました。この問題は解決されました。

この問題の答えについては、この質問を確認してください:Facebookアクセストークンサーバー側認証

于 2012-06-05T13:12:30.790 に答える