Heroku上的Facebook PHP应用程序没有收到signed_request

时间:2013-02-20 00:27:15

标签: php facebook heroku

我添加了一个PHP / JavaScript应用程序作为Facebook页面选项卡,我将它托管在Heroku上。但是它没有收到signed_request。当我在我自己的服务器上托管标签时,它就会很好,而不是在Heroku上。

以下是代码:

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 ') ;
}

问题是什么?

1 个答案:

答案 0 :(得分: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();
    }

这是我的解决方案。