8

PHPを使用してFacebookのアプリケーション(apps.facebook.com/some_app)を開発しようとしています。ここでは、ユーザーの音楽関心に基づいていくつかの情報を提示する必要があります。私はそれが "user_likes>ゲーム"の下にあることを発見しました。次のようにOAuthExceptionコードに関するヘルプ2500

私の問題は、次のとおりです。

  • アクセスするに が私のインデックスページにAPIで提案されているように、私はOAuthのダイアログメソッドを実装しています。
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
          . $app_id . "&redirect_uri=" 
          . urlencode($canvas_page) 
          ."&scope=user_likes"; 
    
  • は、成功した認証の後、私は、パラメータとして "コード" とインデックスページに戻ってきます。私は、ユーザーの音楽 利益を読み取るためだけaccess_tokenは必要がある場合
    http://MY_CANVAS_PAGE/?code=some base64 encoded letters 
    

    は、まず私は知らないが、私はすべての方法が提案しようとしています。私は移動できませんでした この時点から転送
  • コードパラメータが設定されていない場合、承認のためにリダイレクトするこのようなコードがあります(インデックスページ内)。
    if(empty($code) && !isset($_REQUEST['error'])) { 
        $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
        echo("<script> top.location.href='" . $auth_url . "'</script>"); 
    } 
    

  • は現在、私はちょうどここが、 なしの成功と、ユーザの公開情報を取得しようとしています。 示唆したように、私はsigned_request方法を試してみましたが、何の成功

$signed_request = $_REQUEST["signed_request"]; 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 
echo ("Welcome User: " . $data["user_id"]); 
stdClass Object ([error] => stdClass Object ([message] => An active 
access token must be used to query information about the current user. 
[type] => OAuthException [code] => 2500)) 

print_r($decoded_response); 
は、ユーザーの公開情報を取得するために、私はPHP SDK


$facebook = new Facebook(array(
'appId' => MY_APP_ID, //registered facebook APP ID 
'secret' => MY_SECRET, //secret key for APP 
)); 

$fb_user = $facebook->getUser(); 

if($fb_user){ 
    try { 
     $user_profile = $facebook->api('/me'); 
     echo $user_profile['email']; 
    } 
    catch(FacebookApiException $e) { 
     $fb_user = null; 
    } 
} 

しかし、誰の成功にも提案例を試してみました。なぜこのエラーが発生しているのか、ユーザーの音楽関心に正しくアクセスする方法を説明できる人がいますか?おそらく私はAPIを誤解していました。ユーザーの電子メールアドレスは、あなたはそれのためにUSER_EMAIL許可が必要です&公開情報ではありません

+0

はあなたが解決策を見つけるか

結果は、私がhttps://developers.facebook.com/docs/authentication/server-side/からコードを使用して行を置き換えることでしたか? https://graph.facebook.com/me urlでもこのエラーが出ます。私のFacebookの情報を返すべきではありませんか? – Kemal

答えて

0

$code = $_REQUEST["code"]; 
    if(empty($code)) { 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) ; 
    echo("<script>top.location.href='" . $dialog_url . "'</script>"); 
    } 

    $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); 
    $access_token = $params['access_token']; 

PSこのコードを試してみてくださいアクセストークンもアプリケーションアクセストークンもありませんが、アクセスしようとしています/me/ - 'me'は現在のユーザーoのプレースホルダですrページID 'は、ユーザーまたはページのアクセストークンなしでは有効ではありません。私は、アクセストークンのためcodeを交換することができないアプリを見てきました

最も可能性の高い原因にそれらを許可するときにuser_likesPermissionをも必要となります好きのユーザーのリストにアクセスするには

は以下のとおりです。

  1. redirect_uriあなたが使用するフォルダまたはサーバーのルートにあると最後のスラッシュが欠落している(すなわち、それは代わりにhttp://www.example.com/http://www.example.comです)
  2. あなたの認証フローは他のいくつかの理由で、あなたのために壊れている場合access_tokenは

ためのコードをexchagneへの呼び出しで使用される210認証ダイアログへの最初の呼び出しで使用しますが、正確に同じではありませんでしたSDKの例やAuthenticationのドキュメントから分かりませんが、答えを理解するために必要な背景知識が不足している可能性があるため、誰かがあなたに話をするのに時間がかかることがあります

+0

しかし、PHP-SDKを使うことを強くお勧めします。 –

+0

これは私がhttp://developers.facebook.com/blog/post/500/の上に投稿したFacebookブログのリンクのかなり同じコードです。私はすでにそれを試みました。上記のコードで、$ access_tokenをエコーすると何も表示されません。単純に空白です。 – Laraveldeep

+0

私は$ responseかprint_r($ response)をエコーし​​ようとしましたが、何も得られませんでした。なぜ私がヌル/空白の応答を得ているのか分からない。私は事がそこから間違っていたと思う。ありがとう – Laraveldeep

9

エラー2500は、あなたが持っている意味:

おかげ

ディーパック

0

私は問題を解決しましたhttps://developers.facebook.com/blog/post/534/

サンプルをコピーして貼り付けた私のスクリプト。それは完全に適合する。それはPHPとJavascriptのハイブリッド使用のようなものです。

+0

どのような$ meの変数は、あなたが列挙した例やコードにそのような変数がありません – Igy

+0

私は約2年前に私のプロジェクトをコーディングしていて、 '$ me'変数は' $ user_id = $ facebook-> getUser(); 'で現在の' $ user_id'の代わりに '$ me'変数ですが、' $ me'は '$ me'です。申し訳ありませんが、私はそれを削除しました。 – Kemal

1

私はPHPで認証トークンを取得しようとしていましたが、2500エラーは何も返さないというfile_get_contentsの問題が原因であることがわかりました。ブラウザのURLにアクセスできましたが、file_get_contentsを使用してアクセスできませんでした。代わりにここで説明するようにCURLを使用して修正しました:https://stackoverflow.com/a/6325313

$response = file_get_contents($token_url); 

$ch = curl_init($token_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 

とそれ故になった:

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

    /* Facebook say to use this, but file_get_contents isn't working! 
    $response = file_get_contents($token_url,null, $val); 
    */ 

    // Use this as an alternative 
    $ch = curl_init($token_url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($ch); 

    // From https://developers.facebook.com/docs/authentication/server-side/ 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 
関連する問題