0

次のコードを使用してコードをトークンに交換できません。

extract($_GET);
$url=urlencode('http://'.DOMAIN.'/admin/');
$app_id=FB_APPID;
$fb_token=FB_TOKEN;
$secret=FB_SECRET;

if(SEND_NEWS_TO_FB){
    if($code=='none'){
            $state=rand(100000000,9999999999999999999);
            $_SESSION['state']=$state;
            $script="
            <script type='text/javascript'>
                    var scope=encodeURI('publish_stream,user_status');
                    var app_id=$app_id;
                    var state=$state;
                    var url=$js_url;
                    window.location.href='https://www.facebook.com/dialog/oauth?                                                                                            client_id='+app_id+'&redirect_uri='+url+'&scope='+scope+'&state='+state;

            </script>";
            echo $script;
    }



if($code!='none' && $_SESSION['state']==$state && $_SESSION['fb_token']!=1){
            $_SESSION['fb_token']=1;
            $token_url="https://graph.facebook.com/oauth/access_token?"
            ."client_id=" .$app_id
            ."&redirect_uri=" .$url
            ."&client_secret=" .$secret
            ."&code=" .$code;
            $response = file_get_contents($token_url);
            $params = null;
            parse_str($response, $params);
            $token=$params['access_token'];
            $qry="UPDATE `settings` SET `FB_token`='$token'";
            $result=mysql_query($qry);
        }

返された $token_url をブラウザに配置すると、トークンと有効期限が記載されたページが表示されます。スクリプトを実行すると、非常にあいまいな「申し訳ありませんが、問題が発生しました」というメッセージが返されます。これを実行する際に問題が発生したスレッドのほとんどは、リダイレクト URI の違いによるものですが、ログインとトークンの両方のリクエストで、まったく同じ場所から URI が取得されます。

4

1 に答える 1

0

app_id値と「&redirect_url」の間に空白がありました。参考までに、ブラウザ(少なくともクロム)は空白を自動的にurlencodeします。これが、ブラウザでURLが正常に機能する理由です。スペースがどのようにあるかはまだわかりませんが、urlencode()は今のところそれを修正します。

于 2013-01-07T22:50:54.110 に答える