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

WooCommerce商店对接无插件物流公司:自定义Webhook JSON格式需求

解决WooCommerce Webhook JSON格式调整问题

首先,既然你已经成功触发了order.created事件的Webhook并能获取到物流公司返回的JSON数据,接下来的核心就是对返回的JSON进行格式转换。下面是具体的实现思路和可落地的代码示例:

1. 拦截Webhook响应并做格式映射

你需要在接收Webhook请求的服务端(考虑到WooCommerce基于WordPress,用PHP脚本适配性最高)里,先接收原始JSON数据,再通过字段映射完成格式转换。

示例代码(PHP)

先假设你的当前JSON格式是这样的(你可以替换成实际返回的结构):

{
  "order_id": "WC-12345",
  "shipping_info": {
    "courier": "XX速运",
    "tracking_code": "SF123456789012",
    "expected_delivery": "2024-06-15"
  },
  "buyer": {
    "fullname": "李四",
    "mobile": "13900139000"
  }
}

而你期望的JSON格式是:

{
  "order_number": "WC-12345",
  "logistics": {
    "carrier": "XX速运",
    "tracking_id": "SF123456789012",
    "delivery_date": "2024-06-15"
  },
  "receiver": {
    "name": "李四",
    "phone": "13900139000"
  }
}

对应的格式转换PHP代码可以这么写:

<?php
// 接收Webhook的POST原始数据
$rawPayload = file_get_contents('php://input');
$originalData = json_decode($rawPayload, true);

// 处理JSON解码失败的情况
if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    echo json_encode(['error' => '无效的JSON格式']);
    exit;
}

// 字段映射转换
$formattedData = [
    'order_number' => $originalData['order_id'],
    'logistics' => [
        'carrier' => $originalData['shipping_info']['courier'],
        'tracking_id' => $originalData['shipping_info']['tracking_code'],
        'delivery_date' => $originalData['shipping_info']['expected_delivery']
    ],
    'receiver' => [
        'name' => $originalData['buyer']['fullname'],
        'phone' => $originalData['buyer']['mobile']
    ]
];

// 输出转换后的JSON
header('Content-Type: application/json');
echo json_encode($formattedData, JSON_PRETTY_PRINT);
?>

2. 验证与调试技巧

  • 用Postman模拟order.created事件的POST请求,把原始JSON发送到你的处理脚本,快速验证转换结果是否符合预期。
  • 在WooCommerce后台的Webhook设置里开启「日志记录」,这样可以查看Webhook的请求、响应详情,方便排查格式不匹配或数据丢失的问题。

3. 进阶:处理异常场景

别忘了覆盖一些边缘情况,避免脚本崩溃:

  • 原始JSON缺少必填字段时,返回明确的错误提示
  • 对字段值做合法性校验(比如手机号格式、日期格式)
// 新增必填字段检查示例
$requiredFields = ['order_id', 'shipping_info', 'buyer'];
foreach ($requiredFields as $field) {
    if (!isset($originalData[$field])) {
        http_response_code(400);
        echo json_encode(['error' => "缺少必填字段:$field"]);
        exit;
    }
}

如果能提供你实际的当前JSON结构和期望JSON结构,我可以帮你写出更精准的转换代码哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:55:48