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
相关产品推荐
相关产品推荐

