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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:24:04