2011-05-26 53 views
4

我將嘗試這個腳本添加到Facebook上我的iframe應用程序,但它似乎沒有工作:

$signed_request = $facebook->getSignedRequest(); 
$like_status = $signed_request["page"]["liked"]; 
// If a fan is on your page 
if ($like_status) { 
echo 123; 
} else { 
// If a non-fan is on your page 
echo 456; 
} 

我按合適的應用程序ID和祕密密鑰和IM調用facebook.php的正確途徑。我沒有得到任何錯誤或警告,只是腳本不起作用。

$like_status不返回任何

沒有腳本改變了嗎?有另一個版本嗎? 謝謝

編輯。更多代碼:

<?php 
require 'facebook.php'; 
$app_id = "11549508592"; 
$app_secret = "d898cb58b16f2aaaaaaaaaaaaaa"; 
$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    'cookie' => true 
)); 
$signed_request = $facebook->getSignedRequest(); 
$like_status = $signed_request["page"]["liked"]; 
echo "<br>like status = $like_status"; 
?> 
+1

'print_r($ signed_request)'顯示什麼? – ceejayoz 2011-05-26 19:07:34

+0

沒有顯示,它是空的 – Patrioticcow 2011-05-26 19:20:31

+0

'print_r($ _ REQUEST)'顯示什麼? – ceejayoz 2011-05-26 19:22:09

回答

3

Facebook在從Facebook調用Facebook時將已簽名的請求發送到您的頁面。

所以:

$signed_request = $_REQUEST["signed_request"]; 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 
+2

'$ facebook-> getSignedRequest();'爲你做。如果它不工作,這可能也不起作用。 – ceejayoz 2011-05-26 21:39:28

0
  • 什麼是Facebook的PHP SDK版本?
  • 檢查您的網絡服務器中的access_log和error_log
  • 你有一些缺少「;」 ?
0

不知道這裏有什麼問題,但是這裏有一個基本的頁面,它可以工作。 請確保最新版本的facebook.php和base_facebook.php位於同一目錄中。你可以在這裏找到SDK:https://github.com/facebook/php-sdk Allso記得把你的應用程序ID和祕密,你瑟所有111111111111111的

<?php 

require 'facebook.php'; 

$app_id ="11111111111111111"; 
$app_secret = "11111111111111111111111111"; 

$facebook = new facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    'cookie' => true 
)); 

$signed_request = $facebook->getSignedRequest(); 
$page_id = $signed_request["page"]["id"]; 
$page_admin = $signed_request["page"]["admin"]; 
$like_status = $signed_request["page"]["liked"]; 
$country = $signed_request["user"]["country"]; 
$locale = $signed_request["user"]["locale"]; 



?> 

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"/> 
    <title>untiteled</title> 


    <script type="text/javascript"> 
     window.fbAsyncInit = function() { 
      FB.Canvas.setSize(); 
     } 

    </script> 


</head> 
<body> 
    <div class="wrapper"> 

     <?php if(!$like_status):?> 
      <div class="likearrow"><div><div></div></div></div> 
      <p id="like">Click "<b>like</b>" if you want to become a fan of this app</p> 
     <?php endif; ?> 

     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 

    </div> 

<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
FB.init({ 
    appId: '111111111111111111111', 
    status: true, 
    cookie: true, 
    xfbml: true 

}); 
</script>  
</body> 

10

我前一陣子也有類似的問題 - 解決方案是指定全製表符或/和畫布頁面的URL以接收已簽名的請求。

例如:使用http://myapp.com/myapp/index.phphttp://myapp.com/myapp/

+0

不幸的是,我不知道現在Facebook是否存在強制https的問題。在我身邊,我重新回到http。 – Daniel 2011-09-05 11:02:52

+0

這就是您失去簽名請求的原因。您的重定向應該是http:// blah/url /?signed_request = $ _ REQUEST ['signed_request'](您可能需要對它進行URL編碼)。我已經添加了一個解釋這個答案。 HTH – Capsule 2011-10-04 21:54:39

+0

這工作正常! 不要忘記完整的網址! – joseluisq 2014-03-06 20:10:35

2

$_REQUEST['signed_request'] isntead如果你的畫布(或頁選項卡)的網址是不是最後一個和重定向到一些其他的URL因爲Facebook職位簽名的請求只有一次可能是空的。重定向時,發佈的值將丟失。

如果你有過一些重定向控制,再加入?signed_request=$_REQUEST['signed_request']到您的重定向的URL(您可能還需要通過其他定製GET參數)

0

不幸的是,我有同樣的問題。 經過數小時和數小時試圖解決它,我終於創建了一個新的應用程序,完全相同的設置。我更新了密碼和密碼,並將其保存到新密碼中,並且voilà - 它的運行就像是第一次嘗試的魅力。

定義Facebook問題。也許重置應用程序ID和祕密也可以工作,但我沒有先嚐試。