9

例に従って、ここから Facebook へのサーバー側ログインを作成しようとしていますが、うまくいきません。ステップ 7 で、コードをトークンと交換し、後で使用するためにセッションに保存しようとすると、常に次のエラーが発生します。

  file_get_contents(): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

私はこれがすでに何度も尋ねられたことを知っていますが、これを解決することはできません.

他の質問では、PHP SDK を使用するように言われましたが、どの方法を使用すればよいかわかりません。だから私はここで完全に迷っています。


ログインフォームを呼び出すためのコードは次のとおりです。

<a href="<?php echo LOGIN_URL; ?> ?>" class="btn btn-primary">Login with Facebook</a>

ここで、LOGIN_URL は次のように定義されます。

define("LOGIN_URL", $facebook->getLoginUrl(array("redirect_uri" => APP_URL . "fb_login")));

fb_login には、次のコードがあります。

$app->get("/fb_login", function() use($app, $facebook)
{
    $code = $_REQUEST["code"];

    $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . APP_ID . "&redirect_uri=" . APP_URL . $_SESSION["request_uri"] // Previous URL
       . "&client_secret=" . APP_SECRET . "&code=" . $code;

    $response = file_get_contents($token_url); // Doesn't work
    $params = null;
    parse_str($response, $params);

    $_SESSION["access_token"] = $params["access_token"];

    // Let's try with cURL...
    // $ch = curl_init();
    // curl_setopt($ch, CURLOPT_URL, $token_url);
    // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // $output = curl_exec($ch); // Returns false
    // curl_close($ch);

    $graph_url = "https://graph.facebook.com/me?access_token="
      . $params["access_token"];

    $user = json_decode(file_get_contents($graph_url));
    echo("Hello " . $user->name);

    var_dump($code); die();
});

どんな助けでも大歓迎です。前にありがとう。

4

2 に答える 2

6

urlencode質問に直接答えるには、リダイレクト URL を (URL トランスポートに対して安全にする)ことをしないことが問題である可能性が最も高いです。最速の修正は次のとおりです。

$token_url = "https://graph.facebook.com/oauth/access_token?"
   . "client_id=" . APP_ID . "&redirect_uri=" . urlencode(APP_URL . $_SESSION["request_uri"])
   . "&client_secret=" . APP_SECRET . "&code=" . $code;

ただし、Facebook SDK を参照することをお勧めします。これですべてが完了します。

于 2012-11-26T23:23:57.410 に答える
3

PHP SDK のドキュメントを確認しましたか... 非常に広範で素晴らしい.. Facebook SDK を次のようにセットアップするだけです。

$facebook = new Facebook(array(
                'appId' => 'your app id',
                'secret'=> 'your app secret'));

次に、ログインURLを次のように取得できます

$loginURL = $facebook->loginUrl(array(
                'scope' => 'read_stream',
                'redirect_uri' => 'http://yourdomain/path/to/page'));

さらに、SDK は、リダイレクト URI とアプリの構成の不一致、またはアプリ ID やシークレットのエラー、またはまったく別のものによって処理されるエラーについて、より適切な説明を提供する場合があります。ここからSDKをダウンロード

于 2012-11-26T05:53:28.170 に答える