快递物流查询接口说明:单号识别、轨迹解析与调用示例
快递物流查询接口是面向开发者与业务系统开放的通用查询能力,用于根据快递单号获取包裹的物流轨迹与当前状态。该接口支持国内外多家快递物流公司的运单查询,可在不指定承运商的情况下根据单号自动识别快递公司,并返回结构化的在途节点、状态与时间信息,便于在电商、仓储与自有业务系统中集成物流状态展示。
说明:本文为技术使用说明,聚焦参数设计、返回结构、调用规范与排障。鉴权统一使用
Authorization: APPCODE <appcode>,凭证在云市场商品控制台获取。

一、技术简介
快递物流查询接口以 HTTP 方式对外提供查询能力,调用方传入快递单号与相关辅助参数,接口返回该运单的物流轨迹列表、当前状态、承运商信息与更新时间。
接口特征如下:
- 传输协议:HTTPS
- 请求方式:POST 或 GET
- 参数编码:
application/x-www-form-urlencoded - 返回格式:JSON
- 鉴权方式:
Authorization: APPCODE <appcode>请求头
该能力适用于需要展示或流转物流状态的业务系统,调用方无需维护各快递公司自有接口,统一通过一套参数与返回结构完成查询。
二、能力概览
| 能力项 | 说明 |
|---|---|
| 单号自动识别 | com 传 auto 时,接口依据单号特征识别承运商,返回识别到的快递公司编码与名称 |
| 物流轨迹查询 | 返回 data 数组,包含各节点的时间、地点、坐标与描述 |
| 当前状态识别 | 通过 status 字段标识揽收、在途、派送、签收、异常等阶段 |
| 辅助参数补全 | 支持收件地址、寄件地址,用于预测送达时间与轨迹推算 |
| 多语言接入 | 提供 Python、Java、PHP、Node.js 调用示例,表单参数一致 |
| 结果可解析 | 返回结构为平铺字段,便于直接映射为业务对象 |
三、适用场景
- 电商平台订单追踪:在订单详情页展示物流进度,减少用户催单咨询。
- ERP / WMS 仓储同步:将运单状态回流到仓储系统,驱动发货与入库流程。
- 小程序 / APP 物流页:为终端用户提供运单轨迹时间轴。
- 售后支持系统:在处理售后时直接查看最新物流状态,提升处理效率。
- 异常件监控:依据状态字段识别疑难件、退回件并触发告警。

四、接入流程
- 开通服务:在云市场完成商品开通,进入商品控制台。
- 获取凭证:在控制台获取调用凭证
APPCODE,用于请求鉴权头。 - 构造请求:按参数表组装表单(必填
nu,按需传com、phone等)。 - 发起调用:向网关地址发起 POST/GET 请求,头部携带
Authorization: APPCODE <appcode>。 - 解析响应:读取返回 JSON,提取
ret_code与业务字段,按状态字段渲染轨迹。

网关调用地址与
APPCODE以云市场商品控制台显示为准,本文不硬编码具体端点。
五、调用示例与返回结构
5.1 请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
com |
String | 否 | 快递公司编码,默认 auto 时自动识别;识别存在误差,建议已知承运商时显式传入 |
nu |
String | 是 | 快递单号 |
phone |
String | 否 | 收件人或寄件人手机号后四位;查询顺丰、跨越、中通、壹米滴答、信丰时必填 |
delivery_address |
String | 否 | 最终收件地址,至少包含省市区,用于推算收件时间与坐标 |
shipping_address |
String | 否 | 寄件地址,至少包含省市区,用于预测送达 |

5.2 Python 调用示例
import urllib.request
import urllib.parse
import json
GATEWAY = "https://<网关地址>" # 见云市场商品控制台
APPCODE = "<appcode>" # 全文仅此一处:调用凭证
params = urllib.parse.urlencode({
"com": "auto",
"nu": "JT0020720459904",
"phone": "",
})
req = urllib.request.Request(f"{GATEWAY}?{params}")
req.add_header("Authorization", f"APPCODE {APPCODE}")
req.add_header("Content-Type", "application/x-www-form-urlencoded")
with urllib.request.urlopen(req, timeout=10) as resp:
body = json.loads(resp.read().decode("utf-8"))
print(body)
5.3 Java 调用示例
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ExpressQuery {
public static void main(String[] args) throws Exception {
String gateway = "https://<网关地址>?com=auto&nu=JT0020720459904&phone=";
URL url = new URL(gateway);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", "APPCODE <appcode>");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) sb.append(line);
System.out.println(sb.toString());
}
}
5.4 PHP 调用示例
<?php
$gateway = "https://<网关地址>";
$appcode = "<appcode>";
$params = http_build_query(["com" => "auto", "nu" => "JT0020720459904", "phone" => ""]);
$ch = curl_init("$gateway?$params");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: APPCODE $appcode"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch);
curl_close($ch);
echo $resp;
5.5 Node.js 调用示例
const https = require("https");
const querystring = require("querystring");
const gateway = "https://<网关地址>";
const appcode = "<appcode>";
const qs = querystring.stringify({
com: "auto", nu: "JT0020720459904", phone: "" });
const req = https.request(`${
gateway}?${
qs}`, {
headers: {
Authorization: `APPCODE ${
appcode}`,
"Content-Type": "application/x-www-form-urlencoded",
},
}, (res) => {
let data = "";
res.on("data", (c) => (data += c));
res.on("end", () => console.log(data));
});
req.end();
5.6 返回结构说明
响应外层为调用平台统一封装的系统字段(含返回码、请求标识等),业务数据置于 body 对象内。关键业务字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
nu |
String | 快递单号 |
com |
String | 快递公司编码 |
com_name |
String | 快递公司名称 |
ret_code |
Number | 业务返回码,见错误码章节 |
msg |
String | 返回说明 |
update_time |
String | 信息更新时间 |
tel |
String | 快递公司联系方式 |
query_num |
Number | 当前单号累计查询次数 |
logo |
String | 快递公司标识地址 |
data |
Array | 物流轨迹节点列表 |
data[].time |
String | 节点发生时间 |
data[].context |
String | 节点描述 |
data[].location |
String | 节点坐标(GCJ-02) |
data[].address |
String | 节点地址 |
data[].status |
Number | 节点状态,见状态映射 |
delivery_time |
String | 预计送达时间(基于历史数据推算,仅供参考) |
possible_exp_list |
Array | com=auto 且识别失败时返回的候选快递公司列表 |
5.7 返回示例(节选)
{
"code": 0,
"msg": "查询成功",
"request_id": "69436783fb638c5725dcee48",
"body": {
"nu": "JT0020720459904",
"com": "jt",
"com_name": "极兔快递",
"ret_code": 101,
"msg": "查询成功",
"update_time": "2025-12-18 10:23:58",
"query_num": 3,
"data": [
{
"time": "2025-12-16 16:55:56",
"location": "121.227676,31.03257",
"status": 101,
"address": "上海市-松江区",
"context": "【上海松江区广富林网点】已取件"
}
],
"delivery_time": "2025-12-21 21:05"
}
}

六、在线调试实录
以一次真实形态的请求为例(单号已脱敏):向网关传入 com=auto、nu=JT0020720459904、phone= 发起查询,接口返回 ret_code=101、承运商识别为「极兔快递」,轨迹首节点为「已取件」。
解读要点:
auto识别在单号特征明显时可用,但存在误差;若业务已知承运商,建议显式传入com提升准确度。ret_code=101表示揽件阶段,data数组按时间升序排列,渲染时间轴时取首条为起点、末条为最新状态。- 当查询顺丰、跨越、中通、壹米滴答、信丰时,
phone为必填,缺失会返回ret_code=7(单号与手机号不匹配)。

七、调用限制与规范
- 请求频率:单账户并发与每日调用配额以控制台实时配置为准,建议接入方在客户端做前置频控,避免突发流量触发限流。
- 参数规范:
nu为必填;com建议已知承运商时显式传入;phone仅在指定承运商下必填。 - 编码与格式:参数使用表单编码,返回为 UTF-8 JSON。
- 幂等与重试:查询类请求可重复发起;建议对网络超时做有限次退避重试,并对相同单号做短时结果缓存,减少重复查询。
- 合规要求:仅将接口用于已获得用户授权的物流状态查询;不长期存储用户手机号、地址等敏感信息;用途限于业务必要的物流展示与流转。
八、能力边界与免责
- 支持范围:国内外多家主流快递物流公司的运单查询;具体支持列表以接口返回的快递公司列表为准。
- 不支持范围:不提供实时 GPS 定位、不保证轨迹与官网完全一致、不提供寄件下单能力。
- 边界说明:
com=auto自动识别存在误差;隐私号场景下需传入完整后四位;预计送达时间为历史数据推算,不代表实际时效。 - 免责声明:返回数据来自各快递公司公开流转信息,仅供业务展示与流转参考,不构成任何履约、时效或法律承诺;调用方应自行校验并承担基于该数据做出的业务决策风险。
九、错误码排查
ret_code 用于标识业务返回状态:
| ret_code | 含义 | 排查建议 |
|---|---|---|
| 0 | 查询成功或提交成功 | 正常处理返回数据 |
| 1 | 输入参数错误 | 检查 nu、com 等参数是否完整合法 |
| 2 | 查不到物流信息 | 单号可能刚生成尚未入库,稍后重试 |
| 3 | 单号不符合规则 | 校验单号格式与位数 |
| 4 | 快递公司编码不符合规则 | 核对 com 取值是否在支持列表内 |
| 5 | 快递查询渠道异常 | 上游渠道波动,建议退避后重试 |
| 6 | auto 未识别到快递公司 |
显式传入 com 指定承运商 |
| 7 | 单号与手机号不匹配 | 顺丰等场景下核对 phone 后四位 |
节点 status 状态映射:101 揽件、102 在途、103 派送中、104 已签收(完结)、105 用户拒签、106 问题/疑难件、107 无效单(完结)、108 超时单、109 签收失败、110 退回、111 转投、112 待签、113 邮件回收。
十、技术 FAQ
Q:单号已知是哪家快递,还需要传 com=auto 吗?
不必。auto 用于未知承运商时的识别,存在误差;已知承运商时显式传 com 更准确,也能规避识别失败(ret_code=6)。
Q:调用是否支持批量查询?
单次请求对应单个单号。如需批量,应在业务侧循环调用并配合频控与结果缓存,避免触发限流。
Q:哪些承运商必须传手机号?
顺丰、跨越、中通、壹米滴答、信丰在查询时 phone 为必填;隐私号需传入完整后四位。
Q:返回的预计送达时间可靠吗?delivery_time 基于历史数据推算,仅供参考,不代表实际时效,不应作为履约承诺依据。
Q:返回数据可以用于业务展示吗?
可以用于已获用户授权的物流状态展示与流转。注意不长期存储手机号、地址等敏感信息,并自行校验数据准确性。
Q:查询失败该如何重试?
对网络超时与 ret_code=5 渠道异常,建议采用有限次退避重试;对参数类错误(ret_code=1/3/4)应先修正参数再调用。
十一、内容小结
快递物流查询接口通过统一的参数与返回结构,为业务系统提供单号识别、轨迹解析与状态查询能力。接入时需注意:nu 必填、com 建议显式传入、phone 在指定承运商下必填;返回以 ret_code 标识业务状态,以 data 数组承载轨迹节点。工程上建议加入前置频控、结果缓存与退避重试,并遵循最小必要与用户授权原则处理物流数据。本文仅作技术使用说明,具体网关地址、凭证与配额以云市场商品控制台配置为准。