【问题标题】:Facebook sends empty POST to a webhookFacebook 向 webhook 发送空 POST
【发布时间】:2016-03-10 12:55:25
【问题描述】:

我正在尝试通过 facebook 应用为我的页面安装一个用于 Leadgen 事件的 webhook。所以我有:

  1. 潜在客户来源的 Facebook 页面
  2. 脸书应用
  3. 我要保存潜在客户的网络服务器

我相信应用程序和网络服务器连接良好。 Webhook 显示在应用页面等处。但是当我尝试使用此工具 https://developers.facebook.com/tools/lead-ads-testing 创建测试主管时,我收到了一个没有数据的 POST 请求。

我怀疑权限问题,但我可以直接使用 PHP SDK 从页面(通过leadgen_id)检查潜在客户,并且 POST 请求仅通过 URL 从 Facebook 发送,因此他们还不知道令牌。

UPD 对同一网址 (curl -d "param=value" https://..url..) 的普通 POST 请求按预期工作。

【问题讨论】:

    标签: facebook webhooks


    【解决方案1】:

    Facebook 以 Content-Type: application/json 发送 webhook 数据,而不是 …: application/x-www-form-urlencoded(作为带有 method=post 的普通形式。)

    因此,PHP 不会填充 $_POST - 您需要读取原始输入流。这可以使用file_get_contents('php://input') 来完成——然后只需在该数据上应用json_decode,您就可以使用适当的数据结构。

    【讨论】:

      【解决方案2】:

      Facebook 在请求正文中发送潜在客户数据。如果您使用的是框架,请检查您是否有权访问请求正文。 尝试使用 Runscope 之类的第三方中间服务查看完整的请求,非常有用

      【讨论】:

      • 好的,我明白你在说什么了。它作为序列化字符串发送,而不是作为一组参数发送。谢谢!
      【解决方案3】:

      如果你使用 django 框架,你应该 request.body,因为 post 数据将保持为空。

      def webhook_response(request):
         # it will print the contents from facebook webhook response
         print(request.body)
      
         # something like the following object will print up if you are using leadgen
         {"object": "page", "entry": [{"id": "0", "time": 111111111, "changes": [{"field": "leadgen", "value": {"ad_id": "444444444", "form_id": "444444444444", "leadgen_id": "444444444444", "created_time": 11111111, "page_id": "444444444444", "adgroup_id": "44444444444"}}]}]}
      

      【讨论】:

        【解决方案4】:

        此代码对我有用...

        if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == "<mytoken>") {
            echo $_REQUEST['hub_challenge'];
        } else {
            $data = json_decode(file_get_contents("php://input"), true);
            file_put_contents('logFB.txt', print_r($data, true));
        }  
        

        第一部分用于验证 webhook,第二部分用于从 facebook webhook 获取数据。

        希望这会有所帮助...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-30
          • 2020-06-23
          • 1970-01-01
          • 2016-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-07
          相关资源
          最近更新 更多