我读过很多这个问题的"可能重复",并在本文中使用了其中一个问题的代码,但我似乎看不出这个问题到底在问什么
作为与PHP或网站无关的更大项目的一部分,我需要获得到共享服务器的POST请求的主体。根据这篇SO文章的想法,我在服务器上的www文件夹中制作了一个php文件,其中包含以下
webhook.php
<?php
error_log("webhook running");
file_put_contents("post.log", print_r($_POST, true));
?>
然后,我使用第三方公司将测试消息POST到我的服务器上的脚本中,收到了200的响应。
该帖子的正文包含
Body
{
"events": [
{
"id": "EVTESTDCQAHTYRDYM72",
"created_at": "2021-01-04T12:17:41.536Z",
"resource_type": "payments",
"action": "paid_out",
"links": {
"payment": "index_ID_1234567"
},
"details": {
"origin": "mycompanys",
"cause": "payment_paid_out",
"description": "The payment has been paid out by mycompany."
},
"metadata": {}
}
]
}
但是我的服务器上的日志文件只包含
Array
(
)
我不是PHP程序员(只做我需要做的最低限度的工作(出于调试和开发目的,我应该如何修改我的webhook.php脚本,以便查看发送的所有数据?
如果我能做到这一点,那么我可能会想出如何对每个元素进行正确的处理,而这些元素并不总是具有上面的结构。
PHP仅在请求内容类型为application/x-www-form-urlencoded
或multipart/form-data
时填充$_POST。如果您收到任何其他发送,那么您必须使用php://input
来读取原始POST正文,并自己解析它。
您所展示的示例JSON似乎是有效的,因此,如果JSON_decode在这里没有给您预期的结果,那么您的输入数据可能不是您最初预期的结果。
这里的一个基本调试错误是,您只看到多个"复合"操作的最终结果。首先记录file_get_contents('php://input')
返回的内容,看看这是否真的是你所期望的。如果不是从一开始,那么只看json_decode返回的内容没有那么大帮助。