在Facebook iframe-app中没有收到signed_request

pla*_*rsh 1 facebook facebook-php-sdk

我创建了一个页面选项卡Facebook应用程序,我想根据用户是否为粉丝显示不同的内容.(也称为扇形门,登陆页面或显示页面)

为此,我使用PHP SDK,具体如下代码:

<?php
require 'src/facebook.php';

$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET',
'cookie' => true,
));
?>
Run Code Online (Sandbox Code Playgroud)

并在内容中:

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

当我使用我的Facebook用户登录并在我自己的页面上使用它时,这种方法有效.这意味着signed_request存在于$ _POST和$ _REQUEST中.

但是,当我用另一个用户测试它时,这些变量中没有signed_request值.

注意: - 我已经看了我的应用程序配置中的URL设置(300重定向和东西),但这看起来很好,就像我说我的用户它正在工作.. - signed_request不只是空的,它没有甚至存在.

有没有人有类似的问题?

我不介意使用Javascript SDK而不是PHP,如果它可以工作,但我在Javascript方面不是很有经验.

编辑:

我发现你总是需要一个非安全(http)和一个安全(https)的URL.即使您输入安全URL作为标准URL,Facebook也会使用http与其联系,然后将重定向(取决于服务器配置)到https,这会使您丢失signed_request.

小智 5

我刚遇到类似的问题.在我的情况下,问题是在app配置中我没有在引用URL的末尾添加斜杠,该URL引用了一个目录(其中包含index.php).所以我在最后用斜杠重定向到相同的URL并以这种方式丢失了$ _POST.