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

PHP解析WooCommerce Webhooks JSON数据遇阻,求解决方案

嘿,我来帮你搞定这个WooCommerce Webhook JSON解析的问题!

解决WooCommerce Webhook JSON解析故障

从你给出的JSON片段来看,这是标准的WooCommerce订单格式,但解析失败通常逃不过这几个常见原因,咱们一步步排查:

1. 先确保正确获取Webhook原始数据

WooCommerce的Webhook数据是通过POST请求体发送的,不是存在$_POST数组里,你得直接读取原始请求内容:

// 读取POST请求体里的原始JSON
$json_raw = file_get_contents('php://input');
if (empty($json_raw)) {
    die("无法获取Webhook传输的数据");
}

2. 验证JSON格式的完整性

你提供的JSON末尾是"disco...,看起来是被截断了的状态。如果实际接收到的JSON不完整,json_decode会直接返回null。可以先加个验证步骤:

// 解析JSON为关联数组
$order_data = json_decode($json_raw, true);
// 检查解析是否出错
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败: " . json_last_error_msg());
}

如果确实是JSON截断,那要检查两个点:一是WooCommerce的Webhook配置是否正常发送完整数据;二是服务器的post_max_size和upload_max_filesize参数,可能需要调整php.ini里的数值来支持更大的请求体。

3. (可选但推荐)验证Webhook签名

为了确保数据真的来自你的WooCommerce站点,同时也能间接确认数据完整性,建议加上签名验证:

// 获取Webhook签名头
$signature = $_SERVER['HTTP_X_WC_WEBHOOK_SIGNATURE'];
// 替换成你在WooCommerce后台设置的Webhook密钥
$webhook_secret = '你的Webhook密钥';

// 验证签名(用hash_equals避免时序攻击)
if (!hash_equals(base64_encode(hash_hmac('sha256', $json_raw, $webhook_secret, true)), $signature)) {
    die("无效的Webhook签名,数据可能被篡改");
}

4. 解析后正确访问数据

解析成功后,就可以像操作普通数组一样获取订单信息了:

// 获取订单号
$order_number = $order_data['number'];
// 获取订单状态
$order_status = $order_data['status'];
// 遍历商品列表
foreach ($order_data['line_items'] as $item) {
    $product_name = $item['name'];
    $quantity = $item['quantity'];
    // 这里可以添加生成PDF需要的商品信息处理逻辑
}

如果还是卡壳,把json_last_error_msg()返回的具体错误信息贴出来,或者提供完整的JSON数据(敏感信息记得打码),就能更精准定位问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:09:53