【问题标题】:Signed request not available in Facebook app on submitting form?提交表单时在 Facebook 应用程序中没有签名请求?
【发布时间】:2011-04-01 13:38:11
【问题描述】:

我正在开发一个在页面上使用的 Facebook 应用程序。必须有一个带有 Web 表单的页面,然后从提交的数据中创建一个数据库记录。没什么太复杂的。当我在处理发布数据时尝试区分站点时,复杂性就来了。这就是我所拥有的:

<?php
require_once('../lib/facebook.php');
$facebook = new Facebook(array(
    'appId' => 'xxxxxxxxxxxxxxx',
    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'cookie' => true
));
$signed_request = $facebook->getSignedRequest();
switch ($signed_request['page']['id']) {
    case '144778562245193':
        define('SITE_ID', '3');
        define('SITE', 'UK Boxing Events');
        define('DOMAIN', 'ukboxingevents.com');
        define('BODY_CLASS', 'boxing');
    break;
    case '147183265335890':
        define('SITE_ID', '1');
        define('SITE', 'UK Wrestling Events');
        define('DOMAIN', 'ukwrestlingevents.com');
        define('ANALYTICS_ID', 'UA-xxxxxxx-xx');
        define('BODY_CLASS', 'wrestling');
    break;
    case '157856417600021':
        define('SITE_ID', '2');
        define('SITE', 'UK MMA Events');
        define('DOMAIN', 'ukmmaevents.com');
        define('BODY_CLASS', 'mma');
    break;
    default:
        die('Invalid page.');
    break;
}
if (isset($_POST['add_event'])) {
    // submit handler; writes to database
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Add Event</title>
  </head>
  <body>
    <form action="" method="POST" id="add_event_form">
      ...
    </form>
  </body>
</html>

页面在各个应用程序上显示良好,如http://www.facebook.com/ukwrestlingevents?sk=app_162023107185208 所示。但是,当我提交表单时,我得到“无效页面”。在我的switch 语句中按默认情况输出;好像提交表单时没有签名请求,尽管我认为 Facebook 使用的默认请求方法确实是 POST 而不是 GET。

有什么想法吗?

【问题讨论】:

  • 你检查过 $facebook->getSignedRequest() 的实际值是多少吗?
  • 使用var_dump(),似乎$facebook-&gt;getSignedRequest() 在表单提交时返回NULL

标签: php facebook forms http-post


【解决方案1】:

这只是一个有根据的猜测,但我认为您必须将签名的请求包含为隐藏字段,以便在您发布表单后将其传递...

所以:

<input type="hidden" name="signed_request" value="<?php print htmlentities($_REQUEST['signed_request']); ?>">

...应该可以工作...

【讨论】:

  • 谢谢。我会试一试,告诉你进展如何。
【解决方案2】:

如果您在 action="" 方法中输入您的页面名称,表单将发布到您的 php 页面,而不是您从浏览器查看的 facebook 页面。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多