来自使用PHP的Webhook的空响应

时间:2018-07-18 12:37:55

标签: php webhooks

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

这是POST正文消息的示例:See the Payload here

我想在网络钩子触发时创建一个文件并将日期发布到该文件,但是我得到的是空的有效载荷。

这是代码。

    <?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) . ")";
}

2 个答案:

答案 0 :(得分:4)

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

  

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

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

$decodedJson = json_decode($POST['payload']);

php://input是(引用PHP Manual):

  

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

由于这是原始数据(如全文),因此您需要先通过parse_str运行它才能解码JSON有效负载(这是PHP在{{1}中自动为您完成的工作) }。

如果要撰写全文,则只需删除$_POST。由于完整的帖子主体不是JSON,因此不会解码为JSON。

答案 1 :(得分:-1)

尝试使用     parse_str($ str,$ output); 代替     json_decode($ data,true);

所以代码将是

<?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);
parse_str($data, $content );
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) . ")";
}