Easypost webhook大量返回'Unknown'状态问题求助
问题排查与解决方法
- 校验状态取值字段是否正确
Easypost的Tracker对象包含两个易混淆的状态字段:status是Easypost标准化后的通用状态,枚举值包括pre_transit、in_transit、out_for_delivery、delivered、return_to_sender、failure、unknown;carrier_status是承运商返回的原始状态值。你当前代码仅完成了result对象的提取,首先需要确认你后续的状态取值为$result['status'],而非其他非标准化字段。 - 确认Tracker创建参数正确
如果是创建运单后手动单独生成Tracker,需要保证传入的tracking_code(物流单号)和carrier(承运商编码)两个参数完全匹配,任一参数有误都会导致Easypost无法正常拉取承运商的中间物流节点,仅能在承运商最终同步妥投数据时更新状态,中间阶段全部返回unknown。 - 检查webhook事件订阅范围
登录Easypost后台进入Webhooks设置页面,确认你订阅的事件类型包含tracker.updated,而非仅订阅了tracker.created、tracker.delivered这类特定事件。事件订阅范围不全时,你只会收到Tracker创建、妥投两类通知,中间流转状态不会推送到你的接口。 - 补充完整的状态解析逻辑
你可以参考以下代码补全后续的状态和物流节点解析逻辑:
//webhook function to pick the status from 'Tracker' object public function update() { $data = json_decode(trim(file_get_contents('php://input')), true); if(isset($data['result']) && $data['result']['object']=='Tracker') { $result = $data['result']; // 取标准化物流状态 $standard_status = $result['status']; // 取完整物流节点列表 $tracking_nodes = $result['tracking_details']; foreach($tracking_nodes as $node) { $node_status = $node['status']; $node_time = $node['datetime']; $node_location = $node['tracking_location']; // 此处补充节点存储/处理逻辑 } } }
- 测试环境验证逻辑可用性
如果你当前在测试环境调试,可以使用Easypost预设的测试物流号EZ1000000001创建Tracker,系统会自动模拟完整的物流状态流转,你可以借此验证你的webhook接收、解析逻辑是否正常。 - 确认承运商同步范围
如果你使用的是小众区域承运商,可以在Easypost后台的Tracker详情页手动触发刷新,若手动刷新后依然没有中间状态,说明Easypost与该承运商的接口同步存在覆盖限制,可联系Easypost支持确认对应承运商的状态同步能力。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

