目前,电商、货运等行业都需要快递查询API接口,对运单号的物流轨迹进行跟踪。
通过快递查询接口,可以实时查询物流轨迹。支持顺丰、京东、EMS、申通、圆通、宅急送、韵达、中通、百世、天天、四通一达等1500+物流公司,与物流公司官网同步。
可以实现将快递查询功能集成到自有的系统中,方便用户实时跟踪物流信息。比如:
- 电商网站,直接在"我的订单"页面内就能看到订单的物流状态。改变订单的状态和交易流程,例如单号变为"已签收",就能让订单变为可以确认退换货等。
- 物流平台可以自动筛选出"已签收"、"疑难件"等状态的单号,减轻物流跟单人员的压力。
- 评估选择快递公司,根据"已签收"的运单数,可以算出销售人员的业绩,且便于应对货到付款的结算。
请求参数
| 名称 | 类型 | 必须 | 说明 |
|---|---|---|---|
| number | String | 是 | 运单编号 |
| expressCode | String | 否 | 快递公司编号 例如圆通:YTO。快递公司编号不传时,系统会自动识别快递公司编号,但响应时间会比传递快递编号略长 |
| mobile | String | 否 | 顺丰速运、中通、跨越速运需要传入收/寄件人手机号或后四位手机号 |
| sort | String | 否 | 物流明细排序,desc:倒序,asc:升序,默认asc |
成功返回样例
json
{
"code": 200, // 详见code返回码说明
"msg": "成功", // code 对应的描述
"charge": true, // 计费标志
"taskNo": "30853523396532582768", // 本次请求号
"data": {
"expressCode": "ZTO", // 快递公司编号
"expressCompanyName": "中通快递", // 快递公司名称
"expressCompanyLogo": "", // 快递公司logo
"number": "73171992731469", // 运单编号
"logisticsStatus": "SIGN", // 物流状态,详见:物流状态编码对照表;
"logisticsStatusDesc": "已签收", // 物流状态描述
"theLastMessage": "快件已在金华孝顺签收 签收人:本人。如有疑问请电联:15888996643, 投诉电话:0579-82977127, 您的快递已经妥投。风里来雨里去, 只为客官您满意。上有老下有小, 赏个好评好不好?【请在评价快递员处帮忙点亮五颗星星哦~】", // 运单号物流流转当前最新描述
"theLastTime": "2021-11-23 12:24:58", // 运单号物流流转当前最新变更时间
"takeTime": "2天17小时33分", //从揽收到送达所耗时间
"courier": "付村二部傅军", // 快递员
"courierPhone": "15888996643", // 快递员联系方式
"logisticsTraceDetails": [ // 物流明细
{
"time":1632123146000, // 物流变更时间
"logisticsStatus":"ACCEPT", // 物流状态 详见:物流状态编码对照表
"subLogisticsStatus":"ACCEPT", // 物流子状态 详见:物流状态编码对照表
"desc":"【杭州电商仓配揽投部】已收寄,揽投员:刘岭,电话:13754324900", //物流路由信息描述内容
"areaCode":"CN330100000000", // 路由节点所在地区行政编码, 未必会返回
"areaName":"浙江省,杭州市" // 路由节路由节点所在地区
},
{
"time":1632140994000,
"logisticsStatus":"TRANSPORT",
"subLogisticsStatus":"TRANSPORT",
"desc":"离开【杭州电商仓配揽投部】,下一站【杭州萧山区东片集散中心】",
"areaCode":"CN330100000000",
"areaName":"浙江省,杭州市"
},
...
]
}
}
物流状态对照表
| 序号 | 物流主状态 | 物流子状态 |
|---|---|---|
| 1 | WAIT_ACCEPT: 待揽收 | RECEIVE: 接单中 WAIT_ACCEPT: 待揽收 |
| 2 | ACCEPT: 已揽收 | ACCEPT: 已揽收 |
| 3 | TRANSPORT: 运输中 | TRANSPORT: 运输中 ON_THE_WAY: 在途中 SEND_ON: 转单或修改地址转寄 ARRIVE_CITY: 到达目的城市 |
| 4 | DELIVERING: 派件中 | DELIVERING: 派件中 STA_INBOUND: 已放入快递柜或驿站 |
| 5 | AGENT_SIGN: 已代签收 | AGENT_SIGN: 已代签收 |
| 6 | SIGN:已签收 | SIGN: 已签收 STA_SIGN: 从快递柜或者驿站取出 RETURN_SIGN:退回签收 |
| 7 | FAILED:包裹异常 | FAILED: 包裹异常 TIMEOUT_UNSIGEN: 超时未签收 TIMEOUT_NO_UPDATE: 超时未更新 REFUSE_SIGN: 拒收 DELIVER_ABNORMAL: 派件异常 STA_TIMEOUT_UNSIGEN: 快递柜或者驿站超时未取 CONTACT_FAIL: 无法联系 OVER_AREA: 超区 RETENTION: 滞留件 ISSUE: 问题件 RETURN: 退回件 SEND_NO_MESSAGE: 发货无信息 DAMAGE: 破损 CANCEL_ORDER:揽件取消 |
示例代码
java
import com.anq.core.utils.HttpUtil;
import com.anq.core.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class Examples {
String appId = "";
String appSecret = "";
String apiUrl = "";
@Test
public void examples() {
long timestamp = System.currentTimeMillis();
String sign = DigestUtils.sha256Hex(appId + appSecret + timestamp); // 生成sign
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId); //
params.put("timestamp", timestamp);
params.put("sign", sign);
params.put("productCode", "express_query");// 固定值
params.put("expressCode", ""); // 快递公司编号 ,例如圆通:YTO,详见:快递公司编码对照表
params.put("number", ""); // 运单编号
params.put("mobile", ""); // 手机号 ,顺丰速运、中通、跨越速运需要传入收/寄件人手机号或后四位手机号
params.put("sort", ""); // 物流明细排序 ,desc:倒序,asc:升序,默认asc
String resultJson = HttpUtil.postForm(apiUrl, null, params);
log.info(resultJson);
JumeiOpenApiResponse jumeiOpenApiResponse = JsonUtil.toObject(resultJson, JumeiOpenApiResponse.class)
if(jumeiOpenApiResponse.getCode() == 200){
//TODO
}else{
//TODO
}
}
}