我添加了一个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 ') ;
}
问题是什么?
答案 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();
}
这是我的解决方案。