识别Facebook应用程序是否在画布上

时间:2014-01-09 08:18:59

标签: php facebook

我如何识别,我的Facebook应用程序在Facebook画布内或画布外(我们访问www.example.com等网站)。

我试图将URL保留在Facebook画布中,如

echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

但它返回与画布外部相同的URL,
我访问了this链接,但我没有找到任何有用的资料..

请帮忙。

2 个答案:

答案 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;