我如何识别,我的Facebook应用程序在Facebook画布内或画布外(我们访问www.example.com等网站)。
我试图将URL保留在Facebook画布中,如
echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
但它返回与画布外部相同的URL,
我访问了this链接,但我没有找到任何有用的资料..
请帮忙。
答案 0 :(得分:1)
查看是否设置了$_POST['signed_request']
。当您在画布内或页面选项卡内请求您的应用程序URL时,Facebook会将已签名的请求POST参数发送到服务器。如果未设置,您可以确信应用程序在Facebook外运行。
如果您需要获取部分data it contains,则可以使用以下代码解码$_POST['signed_request']
:
function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = "appsecret"; // Use your app secret here
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
如果您不需要数据,只需检查它是否已设置。
答案 1 :(得分:0)
您的网络服务器+ PHP脚本不知道它是从iframe内部加载的。所以你需要找到一种方法来实现这一目标。在向canvas提供画布应用程序URL时,可以向URL查询字符串添加参数。像:
www.example.com/?from=facebook
然后在PHP脚本中,您可以通过访问:
来检查请求是否来自FB[ '从']$ _ GET;