2013-02-20 36 views
2

我已經添加了一個PHP/JavaScript應用程序作爲Facebook頁面選項卡,並且我將它託管在Heroku上。但是它沒有收到signed_request。當我在我自己的服務器上託管選項卡時,它只是很好,而不是在Heroku上。Heroku上的Facebook PHP應用程序未收到signed_request

下面是代碼:

require_once('sdk/src/facebook.php'); 

$facebook = new Facebook(array(
    'appId' => AppInfo::appID(), 
    'secret' => AppInfo::appSecret(), 
    'sharedSession' => true, 
    'trustForwarded' => true, 
    'cookie' => true 
)); 

$signed_request = $facebook->getSignedRequest(); 
$liked = $signed_request['page']['liked']; 

if($liked) { 
    echo('fan'); 
} 
else { 
    echo('not a fan ') ; 
} 

還有什麼問題呢?

回答

3

我有同樣的問題。如果您使用Heroku的基礎PHP模板擺脫這種代碼的,強制執行對生產的HTTPS:

// Enforce https on production 
if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') { 
    header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
    exit(); 
} 

當用戶不使用安全連接,這條線將重定向到另一頁失去POST請求。

如果您想保留它,可以嘗試使用GET方法發送signed_request。它可能看起來像這樣:

// Enforce https on production 
    if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') { 
     $signed_request = ""; 
     if (isset($_REQUEST['signed_request'])){ 
      $signed_request = "&signed_request=" . $_REQUEST['signed_request']; 
     } 
     header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "?" . $signed_request); 
     exit(); 
    } 

這是我的解決方案。

+0

我不敢相信我花了最後8小時試圖弄清楚這一點。你的先生,是一個天才。謝謝! – 2013-03-07 11:26:05

相關問題