最小可运行示例:快递物流查询 API 接入指南
适用场景与核心需求快递物流查询是电商、仓储、供应链、客服系统等场景中最基础且高频的接口之一。开发者通常需要输入一个快递单号返回实时物流轨迹时间、地点、状态描述自动识别单号所属快递公司或手动指定公司编码获取包裹当前状态未查到、已揽收、在途、签收、问题件支持国内主流快递公司顺丰、圆通、中通、申通、韵达、极兔、京东、EMS 等 100本文围绕“最小可运行示例”展开不引入复杂的框架或依赖仅用一条 curl 命令即可验证接口可用性再快速迁移到生产代码。接口能力边界请求方式GET请求地址https://v1.apizero.cn/api/expressQPS5 次/秒超出将返回限流错误缓存内建 5 分钟缓存相同 number com phone 组合在 5 分钟内重复请求不会产生新消耗数据源基于主流物流信息聚合源覆盖国内全部主流快递公司隐私保护顺丰、中通必须传入phone手机号后 4 位否则无法获取轨迹注意该接口不返回历史归档数据仅查询当前物流轨迹轨迹按时间倒序排列最新一条在最前。最小可运行示例curl 接入1. 匿名调用无需 API Key对于原型验证或低频使用可直接省略鉴权头接口会匿名处理并返回数据每日有额度限制以文档最新说明为准。curl -sS -X GET \ https://v1.apizero.cn/api/express?numberYT7460266600081comyto参数说明number必填快递单号8-40 位字母或数字com选填快递公司编码缺省时由上游自动识别。推荐不传com以测试自动识别能力但生产环境建议指定以提升稳定性phone选填手机号后 4 位仅顺丰/中通必填2. 携带 API Key 调用推荐curl -sS -X GET \ -H X-API-Key: sk_live_xxxxxxxxxxxxxx \ https://v1.apizero.cn/api/express?numberSF1234567890phone1234注意本例假设快递公司为顺丰comsf可传可不传自动识别时需保证phone参数正确。若使用其他鉴权方式如Authorization: Bearer sk_live_xxx请参照接口文档调整。参数详解与鉴权方式Query 参数表参数名必填类型说明示例值number是string快递单号8-40 位字母数字组合YT7460266600081com否string快递公司编码。常用sf/yto/zto/sto/yunda/jt/jd/ems。缺省则自动识别ytophone否string手机号后 4 位。顺丰/中通因隐私保护强制要求其他快递可选或不传1234鉴权方式接口支持两种鉴权方式二选一Header 方式传入X-API-Key或Authorization: Bearer sk_live_xxx素材默认使用X-API-Key文档推荐Authorization实际以最新文档为准匿名调用不传鉴权头接口自动降级为匿名用户每日有调用次数上限生产环境建议始终携带 API Key避免因匿名限额耗尽而影响服务。返回字段解读正常响应体结构HTTP 200{ code: 0, data: { com: yto, com_name: 圆通快递, number: YT7460266600081, state: 3, status: DELIVERED, status_desc: 已签收, trace_count: 3, traces: [ { content: 【上海市】您的快件已签收签收人本人, time: 2026-05-06 14:23:11 }, { content: 【上海市】快件正在派送途中派件员张三 138****1234, time: 2026-05-06 09:15:32 }, { content: 【广州市】快件离开 广州转运中心 发往 上海转运中心, time: 2026-05-05 22:41:08 } ] }, msg: 成功, request_id: abc123def456 }核心字段说明字段类型说明codeint业务状态码。0 表示成功其他值见错误处理data.comstring快递公司编码与请求入参或自动识别结果一致data.com_namestring快递公司中文名称data.numberstring查询的单号data.stateint物流状态码0未查到1已揽收2在途3签收4问题件data.status_descstring状态文字描述如“已签收”data.trace_countint轨迹节点数量data.tracesarray轨迹列表按时间倒序。每个元素含time和contentrequest_idstring唯一请求 ID可辅助问题定位注意data.state与data.status_desc含义对应但status_desc可能因快递公司不同而有细微差异建议以state为判断依据。错误处理与常见问题业务状态码code含义处理建议0成功正常解析 data1001缺少必要参数检查number是否为空或格式错误1002单号格式不合法确认单号长度在 8-40 位仅含字母和数字1003快递公司编码错误检查com是否为支持的编码或去掉com启用自动识别1004隐私号段缺少 phone顺丰/中通必须传phone参数且需为手机号后 4 位数字1005未查到物流信息可能单号不存在或物流尚未更新可隔 5 分钟重试1101请求过于频繁QPS 超限需降频或使用缓存1201API Key 无效检查鉴权头格式和 Key 是否正确-1系统内部错误联系接口服务方排查常见返回示例错误{ code: 1004, data: null, msg: 顺丰/中通需传入手机号后四位, request_id: error001 }此时应检查是否传了phone或手机号长度不是 4 位数字。工程化注意事项1. 自动识别 vs 手动指定 com自动识别不传com适用于收件端只提供一个单号对快递公司不确定的场景。缺点是依赖上游识别准确率偶尔会将类似单号匹配到错误公司。手动指定传com推荐在生产环境使用。例如用户下单时已经选择了快递公司则直接传对应编码减少出错。2. 轮询频率与缓存策略接口内建议前端轮询不超过1 次/分钟。接口已内置 5 分钟缓存对于同一单号在 5 分钟内第二次请求不会产生新消耗但也不会有新数据。若需要实时跟踪建议使用 WebSocket 或自建长轮询不要滥用短轮询。3. 隐私号段处理对于顺丰、中通用户必须提供手机号后 4 位。后端在存储或传输时需注意数据脱敏前端展示时也应仅显示后 4 位。4. 响应数据结构稳定性traces数组中的time格式为yyyy-MM-dd HH:mm:ss但不同快递公司返回的时间精度可能不同部分仅到日。在解析时建议统一按字符串处理避免硬解析为日期格式引发异常。5. 错误重试策略code为 1101限流可使用指数退避初始等待 1 秒最大 30 秒。网络超时或 5xx 错误建议重试 2-3 次。最小可运行完整示例Pythonimport requests url https://v1.apizero.cn/api/express params { number: YT7460266600081, com: yto, # 指定圆通也可不传让系统自动识别 } headers { X-API-Key: sk_live_xxxxxxxxxxxxxx } resp requests.get(url, paramsparams, headersheaders) if resp.status_code 200: data resp.json() if data[code] 0: traces data[data][traces] for t in traces: print(f{t[time]} - {t[content]}) else: print(业务错误:, data[msg]) else: print(HTTP 错误:, resp.status_code)浏览器可执行的 JavaScript 示例fetchconst url new URL(https://v1.apizero.cn/api/express); url.searchParams.set(number, SF1234567890); url.searchParams.set(phone, 1234); fetch(url, { headers: { X-API-Key: sk_live_xxxxxxxxxxxxxx } }) .then(res res.json()) .then(data { if (data.code 0) { data.data.traces.forEach(t console.log(t.time, t.content)); } else { console.error(data.msg); } });参考文档官方文档页https://apizero.cn/aidocs/express原始接口说明https://apizero.cn/aidocs/express/raw.md文中所列代码示例均可在实际环境中直接运行只需替换为有效的 API Key 和正确的快递单号。接口参数与返回字段以最新文档为准。