【问题标题】:Not receiving signed_request in Facebook iframe-app未在 Facebook iframe-app 中收到 signed_request
【发布时间】:2012-02-08 08:22:12
【问题描述】:

我创建了一个页面标签 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 用户登录并在我自己的主页上使用它时,此功能有效。 这意味着 $_POST 和 $_REQUEST 中都存在 signed_request。

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

注意事项: - 我已经在应用程序配置中查看了我的 URL 设置(300 重定向等),但这看起来不错,就像我对我的用户所说的那样,它正在工作.. - signed_request 不只是空的,它甚至不存在。

有人有类似的问题吗?

如果可以的话,我不介意使用 Javascript SDK 而不是 PHP,但我对 Javascript 不是很有经验。

编辑:

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

【问题讨论】:

    标签: facebook facebook-php-sdk


    【解决方案1】:

    我刚刚遇到了类似的问题。就我而言,问题是在应用程序配置中,我没有在引用目录的选项卡 URL 的末尾添加斜杠(其中包含 index.php)。所以我得到了一个重定向到相同的 URL,最后有一个斜杠,并以这种方式丢失了 $_POST。

    【讨论】:

      【解决方案2】:

      signed_request 永远不会通过GET 传递,而是通过POST$_REQUEST 包含根据php.ini 中配置的数据(request_ordervariables_order

      由于您使用的是PHP-SDK,最好将其用于signed_request检索:

      $signed_request = $facebook->getSignedRequest();
      $liked = $signed_request['page']['liked'];
      

      对于在页面选项卡中运行的应用程序,signed_request 始终会被传递,所以如果你没有得到它,请确保没有忽略正在传递的 POST 数据的重定向。

      【讨论】:

      • 感谢您的快速回复。您对 POST 与 GET 的看法是对的,我在描述中将它们混淆了。
      • 我按照您的建议更改了行,但效果仍然相同。我确定 URL 不会被重定向,因为就像我说的那样,使用我的个人帐户它工作得很好,我没有不明白..
      • @platzhersh,您可以使用 Chrome 中的“开发人员工具”(网络选项卡)之类的东西来查看 signed_request 是否传递给您的“选项卡画布”,以确保这是否适合您...
      • 我分析了后台发生的 HTTP 操作。两者都在具有 WebDeveloper 功能的 Firefox 中进行了测试。同样,我的帐户和第二个(测试)帐户有不同的结果: MyAccount:1 POST 到 Facebook 应用程序 URL(https)-HTTP 响应 200 其他帐户:1 POST 到 Facebook 应用程序 URL(http)-HTTP 响应 302 2 GET到 Facebook 应用程序 URL (https) - HTTP 响应 200 似乎第二个帐户首先尝试加载不安全的 http 站点,然后被重定向到 https URL。我会再次检查我的所有配置。我可能有一个线索。再次感谢:)
      • 我想我找到了问题所在,我的个人帐户配置为始终通过 https 使用 Facebook,这就是为什么它直接加载安全画布,而其他用户没有浏览 facebook HTTPS。但是:实际上在应用程序配置中只有 https URL,那么为什么 facebook 甚至尝试加载 http URL?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多