【问题标题】:how to write a php to get the json post from a webhook?如何编写一个 php 从 webhook 获取 json 帖子?
【发布时间】:2012-06-14 19:21:54
【问题描述】:

我将我的 url xxx/getjson.php 添加到 webhook,一旦有人注册,它就会将 json 数据发布到我的 url。我用http://requestb.in/查看数据,结果是这样的:

payload{ "signup": { "address": { "address1": "XX",
                                  "country": "United States"},                     
                     "id":22}}
token

我写的php脚本是:

$obj=json_decode($_POST);            //cannot get the json data

$userid=$obj->signup->id;

我也不知道怎么用'payload'

我找到了一个类似的示例代码,并使用他们的网络挂钩对其进行了很好的测试。 http://support.unbounce.com/entries/307685-how-does-the-form-webhook-work 但是,他们使用 'data.json' 而不是 'payload' 作为参数。

$form_data = json_decode($unescaped_post_data['data_json']);  
$userid= =$form_data->signup->id;

我使用了他们的 stripslashes_deep 函数,并用 'payload' 替换了 'data_json' 但仍然不起作用。

非常感谢您的帮助。谢谢!

【问题讨论】:

  • post var 是什么? $_POST['payload']
  • php://input <> $_POST?stackoverflow.com/questions/5806971/… 的可能重复项 - 取决于您的问题中未提及的具体情况。
  • 我们是否需要在 php 或 apache 配置中进行任何更改才能使其正常工作。我正在使用 sendgrid 事件 webhooks,但它没有发布到我的 php 文件中。

标签: php json


【解决方案1】:

看起来$obj=json_decode($_POST); 未能解码您的 JSON 字符串。

我认为您遇到的问题是您没有正确地对“有效负载”数据进行 JSON 编码。

payload{ 
    "signup": { 
             "address":{ 
                     "address1": "XX",
                     "country": "United States"
              },                     
              "id":22
     }
}

令牌 格式不正确。 { "signup": { "address": { "address1": "XX","country": "United States"},"id":22}} 是正确的 JSON 字符串。 JSON 两端的额外内容将导致它无法解析。

$_POST['payload'] 可能是您访问它的方式。

另外,你没有给我们足够的代码来真正帮助我们。我们需要 HTML 表单或实际发送/构建 POST 的 Javascript。 (或者你在使用像 Curl 这样的东西吗?)

【讨论】:

  • 仅在我使用 $_REQUEST["payload"] 而不是 $_POST 时有效。 webhook api 提供者没有为我提供太多信息。现在我发现“有效载荷”是一个变量。谢谢
【解决方案2】:

终于解决了!只需要三行,但我花了一整天的时间...... webhook API 提供者应该提供更多关于它的信息。感谢您的帮助!

$data = $_REQUEST["payload"];           
$unescaped_data = stripslashes($data);
$obj = json_decode($unescaped_data);
$userid = $obj->signup->id;

【讨论】:

    【解决方案3】:

    $_POST 将是一个数组,因此您需要指定键。

    $obj=json_decode($_POST['payload']); // put the second parameter as true if you want it to be a associative array
    
    $userid=$obj->signup->id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多