我已经创建了一个页面选项卡Facebook应用程序,我想要显示不同的内容取决于用户是不是粉丝。(也称为扇门、登录页面或展示页面)
为此,我使用PHP SDK,具体地说是以下代码:
<?php
require 'src/facebook.php';
$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET',
'cookie' => true,
));
?>在内容中:
<?php
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["page"]["liked"])) {?>
Thank you for liking our Page!
<?php } else { ?>
You haven't liked our page yet..
<?php };
// Debugging Code
echo "REQUEST:<br>";
print_r($_REQUEST);
echo "<br>GET:<br>";
print_r($_GET);
echo "<br>POST:<br>";
print_r($_POST);
?>当我用我的Facebook用户登录时,当我在我自己的页面上使用它时,这是有效的。这意味着signed_request在$_POST和$_REQUEST中都存在。
但是,当我用另一个用户测试它时,这些变量中没有signed_request值。
注意:-我已经在应用程序配置中查看了我的URL设置(300重定向之类的东西),但这看起来很好,就像我对我的用户说的那样,它是有效的。- signed_request不仅仅是空的,它甚至不存在。
有没有人有类似的问题?
我不介意使用Javascript SDK而不是PHP,但我对Javascript不是很有经验。
编辑:
正如我所发现的,你总是需要一个不安全的(http)和一个安全的(https) URL。即使你输入一个安全的网址作为标准网址,facebook也会使用http联系它,然后会被重定向(取决于服务器配置)到https,这会使你的signed_request丢失。
发布于 2012-02-08 16:50:11
signed_request不是通过GET传递的,而是通过POST传递的。根据php.ini (request_order或variables_order)中的配置,$_REQUEST包含数据
既然你正在使用PHP-SDK,最好将它用于signed_request检索:
$signed_request = $facebook->getSignedRequest();
$liked = $signed_request['page']['liked'];对于在Page Tab中运行的应用程序,总是传递signed_request,所以如果您没有得到它,请确保没有忽略传递的POST数据的重定向。
发布于 2012-04-16 19:54:08
我刚刚遇到了类似的问题。在我的例子中,问题是在应用程序配置中,我没有在tab URL的末尾加上斜杠,它引用了一个目录(其中有一个index.php )。因此,我得到了一个重定向到相同的网址,在末尾有一个斜杠,并以这种方式丢失了$_POST。
https://stackoverflow.com/questions/9189783
复制相似问题