0

この問題は、何が原因かはわかりますが、解決策が見つからないため、本当にイライラします。

Facebookのアクセストークンを取得しようとするとき、最初に私のURLを持っています:

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&redirect_uri=".urlencode($my_url)."&client_secret=".$app_secret."&code=".$code;

url_decode次に、次のように使用とカールの両方を試みました。

$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       
$response = curl_exec($ch);
curl_close($ch);

curl では、応答は空です (returntransfer が true に設定されていても)。

次に、次のように file_get_contents を試します。

$response = file_get_contents($token_url);
echo $response;

これにより、URL が正しく解析されていないことを示すエラーが生成されます。

Warning : file_get_contents(https://graph.facebook.com/oauth/access_token?client_id=XXXXXXXX&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2F&client_secret=XXXXXXXXXXXXXXXXXX&code=AQAw8Y3fehv2IWxhmQs9M28IsP4hAzwL5pnvSJkb2v_9H61Gpt659IgMHLgvgRH46tXl8BAL0SRyilKqVay4b4Su68nzT2OmbVK88eNHdGQqIaR_N7X8noIkQTeq_HuEImLlxQwbFcg_PJ5EGh9l392KL2OFqi8qplgOE5m21qlKOvVvUE3cZrcfk_mmr9FUm5eQXIvEp8sUYHxHAXvvyNmV [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in C:\Users\Mark\workspace\Never\aqueous-sands-5942\index.php65

URL を削除する"amp;"と機能し、ブラウザーで直接 URL を開くと正しい応答が表示されます。

"amp;"URL の一部にならないようにするにはどうすればよいですか? どこにも余分なスペースが表示されず、URL をエンコードしました (http://localhost:8000/)

私は何を間違っていますか?

アップデート:

より大きなコード サンプル:

require 'sdk/src/facebook.php';

   $app_id = "123456778";
   $app_secret = "XXXXXXXXXXXXX";
   $my_url = "http://localhost:8000/";

  session_start();

    @$code = $_REQUEST["code"];

    if (!isset($_REQUEST["code"])) {

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

     echo("<script>top.location.href='" . $dialog_url . "'</script>");
    }

 if( $_SESSION['state'] && ( $_SESSION['state'] === $_REQUEST['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;
    echo "value of token:";
    echo $token_url;

  /* curl section (commenting out) */ /*
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $token_url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       
    $response = curl_exec($ch);
    curl_close($ch); */

    echo "command:"; 
    echo $token_url;
    echo "value:";
    $response = file_get_contents($token_url);
    echo $response;
    $params = null;
    parse_str($response, $params); 
4

1 に答える 1