2012-07-30 45 views
0

無法弄清楚爲什麼這是運行在我的網站和Facebook之間的一個恆定的前向循環,永不終止最後一步(這是發佈狀態牆)。Facebook API發佈到牆和無限循環問題與許可檢查

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(); 

我們可能會或可能不會有基於此數據用戶是否登錄。

如果我們在這裏有一個$用戶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語句實際上貼到牆上?我在這裏看不到我做錯了什麼。任何幫助不勝感激。由於

+1

$ permissions從哪裏來? – Robbie 2012-07-30 22:27:37

+0

Uhhhh我認爲它來自Facebook的PHP API,但也許我只是瘋了,這絕對會解釋無限循環。我想我只是不知道如何獲得Facebook授權後返回到原始源文檔的權限。 – 2012-07-30 22:38:56

+0

在這種情況下,我會發布asnwer作爲答案;) – Robbie 2012-07-30 23:22:09

回答

1

你缺少的臨界線是

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

這得到來自Facebook的權限當前用戶,你array_key_exists前需要它。

+0

繁榮!絕對完美的工作,我可能會刪除它,而搗碎這兩個解決方案。非常感謝,希望我能更多地讚揚你。 – 2012-07-30 23:32:14