使用 php 来自 webhook 的空响应

Lee*_*e N -3 php webhooks

创建或更新新记录时,将触发 Webhook 并在帖子正文中发布三个键。名为有效负载的键之一包含带有记录属性的编码 JSON。

这是 POST 正文消息的示例:请参阅此处的有效负载

我希望当 webhook 触发时它会创建一个文件并将日期发布到该文件,但我得到的有效负载为空。

这是代码。

    <?php
/**
 * Created by PhpStorm.
 * User: Lee N
 * Date: 16/07/2018
 * Time: 14:46
 */


$data = file_get_contents('php://input');
//decode JSON data to PHP array
$content = json_decode($data, true);

if($content ==""){
    $data = "Payload fired but no datkhkjhkjhjka";

}else{
    $data = $content;

}

$pagename = 'from_vend';

$newFileName = $pagename.".txt";

if (file_put_contents($newFileName, $data) !== false) {
    echo "File created (" . basename($newFileName) . ")";
} else {
    echo "Cannot create file (" . basename($newFileName) . ")";
}
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 5

您的 POST 请求是 x-www-form-urlencoded 的。引用维基百科(强调我的):

当 Web 浏览器从 Web 表单元素发送 POST 请求时,默认 Internet 媒体类型为“application/x-www-form-urlencoded”。这是一种用于对可能具有重复键的键值对进行编码的格式。每个键值对均由“&”字符分隔,每个键与其值由“=”字符分隔。通过用“+”字符替换空格,然后对所有其他非字母数字 [9] 字符使用 URL 编码,可以对键和值进行转义。

当您向 PHP 发送这样的 POST 请求时,它将自动填充$_POST键/值对。因此,为了访问 JSON 有效负载,请使用

$decodedJson = json_decode($POST['payload']);
Run Code Online (Sandbox Code Playgroud)

php://input(引用PHP 手册):

一个只读流,允许您从请求正文中读取原始数据。

由于这是原始数据(如完整的帖子正文中所示),因此您需要首先运行它parse_str才能解码 JSON 有效负载(这是 PHP 在 中自动为您执行的操作$_POST)。

如果你想写完整的帖子正文,你可以删除json_decode. 因为完整的帖子正文不是 JSON,因此不会解码为 JSON。

  • @Leemarshn 他指定了 `php://input` 的作用,并直接引用 PHP 手册。“`php://input` 是一个只读流,允许您从请求正文中读取原始数据。” (2认同)