You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获其他Web服务POST请求?Block.io Web Hooks数据为空求助

解决Block.io Web Hooks POST数据捕获问题

嘿,我明白你的问题了!Block.io的Web Hook发送的是JSON格式的POST请求体,而不是传统的表单编码数据(application/x-www-form-urlencoded),这就是你用$_POST获取不到内容、插入数据库为空的原因——$_POST只对表单编码的POST数据生效。

下面是正确捕获数据的步骤和代码:

1. 读取原始POST请求体

直接读取PHP的输入流来获取完整的JSON字符串:

$rawPostData = file_get_contents('php://input');

2. 解码JSON为PHP数组/对象

把获取到的JSON字符串转换成PHP可以操作的结构:

$notificationData = json_decode($rawPostData, true); // 第二个参数true返回数组,否则是对象

3. 验证解码结果(可选但推荐)

确保JSON解码成功,避免后续出错:

if (json_last_error() !== JSON_ERROR_NONE) {
    // 处理解码失败的情况,比如记录日志
    error_log('Block.io Web Hook JSON解码失败: ' . json_last_error_msg());
    exit;
}

完整示例代码

<?php
// 读取原始POST数据
$rawPostData = file_get_contents('php://input');

// 解码为关联数组
$notificationData = json_decode($rawPostData, true);

// 验证解码是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    error_log('Block.io Web Hook JSON解码错误: ' . json_last_error_msg());
    http_response_code(400); // 返回错误状态码给Block.io
    exit;
}

// 现在你可以访问所有通知数据了
$notificationId = $notificationData['notification_id'];
$deliveryAttempt = $notificationData['delivery_attempt'];
$notificationType = $notificationData['type'];
$notificationDataPayload = $notificationData['data'];
$createdAt = $notificationData['created_at'];

// 接下来执行数据库插入操作,注意使用预处理语句防止SQL注入
// 示例(假设使用PDO):
/*
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO webhook_notifications (notification_id, delivery_attempt, type, data, created_at) VALUES (?, ?, ?, ?, ?)");
$stmt->execute([
    $notificationId,
    $deliveryAttempt,
    $notificationType,
    json_encode($notificationDataPayload), // 把data数组转成JSON字符串存储
    date('Y-m-d H:i:s', $createdAt) // 把时间戳转成可读日期
]);
*/
?>

额外注意事项

  • 数据库存储data字段时,建议用JSON类型(如果你的数据库支持,比如MySQL 5.7+),或者转成JSON字符串存在TEXT字段里。
  • 处理完请求后,记得返回200 OK状态码给Block.io,否则它可能会重复投递通知。
  • 一定要用预处理语句插入数据库,避免SQL注入风险。

内容的提问来源于stack exchange,提问作者Isaac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:24