Facebook API发布到墙和无限循环问题与权限检查


Facebook API for Posting to Wall and Infinite Loop Issue with Permission Check

我不明白为什么这是在我的网站和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();

根据用户是否登录,我们可能有也可能没有这些数据。

如果我们在这里有$user-id,则意味着我们知道该用户已登录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();
}

因此,这是我发现的两种不同解决方案的一个相当肮脏的混合体。实际上,如果我在一个单独的文档上执行权限,然后在没有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语句以实际发布到墙上?我就是看不出我在这里做错了什么。非常感谢您的帮助。感谢

您缺少的关键行是

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

这将从facebook获得当前用户的权限,您需要在array_key_exists之前获得该权限。