0

これが私のサイトとFacebookの間で一定の順方向ループで実行されている理由を理解できず、最終ステップ(ステータスをウォールに投稿すること)で終了することはありません。

require 'facebook.php';

//Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXXXXXXXXXXX',
 ));


$user = $facebook->getUser();

ユーザーがログインしているかどうかに基づいて、このデータがある場合とない場合があります。

ここに$useridがある場合、それはユーザーがFacebookにログインしていることはわかっているが、アクセストークンが有効かどうかはわからないことを意味します。ユーザーがFacebookからログアウトした場合、アクセストークンは無効です。

if ($user) {
  try {
   // Proceed knowing you have a logged in user who's authenticated.
  $user_profile = $facebook->api('/me');
 } catch (FacebookApiException $e) {
   error_log($e);
   $user = null;
 }
}


if ($user) {
 $logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl();
}

つまり、これは私が見つけた2つの異なるソリューションのかなり汚いマッシュアップです。また、別のドキュメントでアクセス許可を実行してから、ifステートメントなしでこの次の部分をロードしても、実際には問題なく機能します。だから私はFacebookに正しく​​接続していることを知っています...

if ($user): 

if(array_key_exists('publish_stream', $permissions['data'][0]) ) {
            // Permission is granted!
            // Do the related task
            $post_id = $facebook->api('/me/feed', 'post', array('message'=>'Testing testing 123!'));
    echo "<br><br><br><h1> POSTED STATUS TO WALL!</h1>";

       } else {
            // We don't have the permission
            // Alert the user or ask for the permission!
           echo "Click Below to Enter!";
           header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
       }

ここでの問題は、公開ストリームのアクセス許可を何度も繰り返し実行し続け(ヘッダーが前方にあり、リダイレクトが多すぎるとタイムアウトになる)、実際に壁に投稿するifステートメントをキャッチしないことです。ここで何が間違っているのかわかりません。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

1

あなたが見逃している重要な線は

$permissions = $facebook->api("/me/permissions");

これにより、現在のユーザーのFacebookからアクセス許可が取得されます。これは、array_key_existsの前に必要です。

于 2012-07-30T23:21:46.827 に答える