如何解决Facebook PHP应用程序,如何检测它处于“画布”或“页面”模式?
| 在iframe.php
应用中,如何检测自己处于页面模式还是画布模式?谢谢!
解决方法
阅读文档:
Facebook始终会发送“ѭ1”(用于画布和页面网址)
如果是页面,Facebook将添加一个附加参数parameter2ѭ
因此,基于此,您可以执行以下操作:
<?php
if( isset($_REQUEST[\'signed_request\']) ) {
// We are in Canvas or Page now
// Let\'s extract the data from the signed_request
// to check if we are inside a Facebook Page
$app_secret = \"APP_SECRET\";
$data = parse_signed_request($_REQUEST[\"signed_request\"],$app_secret);
if( isset($data[\"page\"]) ) {
echo \"Page\";
} else {
echo \"Canvas\";
}
} else {
echo \"None,or something went wrong!\";
}
function parse_signed_request($signed_request,$secret) {
list($encoded_sig,$payload) = explode(\'.\',$signed_request,2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload),true);
if (strtoupper($data[\'algorithm\']) !== \'HMAC-SHA256\') {
error_log(\'Unknown algorithm. Expected HMAC-SHA256\');
return null;
}
// check sig
$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,\'-_\',\'+/\'));
}
?>
,我还必须在标准中添加网站。这是我的Yii代码
if(empty($_POST[\'signed_request\']) === false)
$signedRequest = Yii::app()->fb->getSignedRequest();
if(isset($signedRequest[\'page\']))
$this->layout = \'tab\';
else if(isset($signedRequest[\'user\']) && ! isset($signedRequest[\'page\']))
$this->layout = \'canvas\';
else
$this->layout = \'website\';
,感谢@ifaour解决方案;
我必须对其进行修改才能使其正常运行。
这对我有用;
我注意到签名的请求仅在将站点加载到画布下时才发送;但是当直接访问时,则不会发送任何签名的请求。
所以我结束了这段代码:
if( !isset($_SESSION[\'signed_request\']) && empty($_SESSION[\'signed_request\']) ) {
exit(\"direct access not allowed.\");
}
else
{
// echo \'Canvas\';
// continue script
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。