0

次のコードがあり、部分的に機能しています

<?php

   require_once 'facebook.php';

   $app_id = 'MY_APP_ID';
   $app_secret = 'MY_APP_SECRET';
   $app_url = 'http://mysite.com/index.php/';
   $scope = 'user_about_me';

   // Init the Facebook SDK
   $facebook = new Facebook(array(
     'appId'  => $app_id,
     'secret' => $app_secret,     
     'cookie' => true
   ));

   // Get the current user
   $user = $facebook->getUser();

   // If the user has not installed the app, redirect them to the Auth Dialog
   if (!$user) {
     $loginUrl = $facebook->getLoginUrl(array(
       'scope' => $scope,
       'redirect_uri' => $app_url,
     ));

     print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
   } 

    $user_profile = $facebook->api('/me');
    echo "id: " . $user_profile['id'];   

 ?>

このページには正しい ID が出力されますが、他のいくつかのページでは if(!$user) に入ります。

しかし、oauth URL にエラーがあります。

API エラー コード: 191 API エラーの説明: 指定された URL は、アプリケーションによって所有されていません エラー メッセージ: 無効な redirect_uri: 指定された URL はアプリケーション構成で許可されていません。

ここでスタックオーバーフローで同様の問題を見つけましたが、修正できないようです:/

私の設定では、同じURLと$ app_urlがあります

Facebookのあるウェブサイト -> サイトのURL -> https://www.facebook.com/pages/myappname/373671679372127/

編集: app_url を編集したので、アプリ設定のキャンバス URL と同じになりました: http://mysite.com/index.php/

今、私はエラーを取得しません。空白のウィンドウが表示されます:(

編集: テスト時に時々 Cookie をクリアすることが重要です。そうでなければ、どこかでいくつかの非常にランダムなエラー

4

1 に答える 1

1

開発者設定で「Facebook ログインのあるウェブサイト」に正しい URL を設定しているかどうかを確認します。これは facebook.com のページであってはなりません。あなたのドメインへのリンクである必要があります。

また、コードの最後の 2 行を「else」ブロックで囲みます。また、JavaScript コードが間違っています。これは正しいでしょう:

print('<script> top.location.href="' . $loginUrl . '";</script>');

(二重引用符を使用すると理解しやすくなります。セミコロンがありません。常に必要ではない場合でも、セミコロンを使用することをお勧めします)

このコードを試してください:

$user = $facebook->getUser();

   // If the user has not installed the app, redirect them to the Auth Dialog
   if (!$user) {
     $loginUrl = $facebook->getLoginUrl(array(
       'scope' => $scope,
       'redirect_uri' => $app_url,
     ));
     print('<script> top.location.href=\'' . $loginUrl . '\';</script>');
   }
   else {
    echo 'User ID: ' . $user;
   }

また、"index.php" の後のスラッシュを取り除きます。それは私のフォルダではありません(私は願っています/推測します)。

于 2012-11-15T10:27:56.597 に答える