快递物流推送-快递订阅API接口的运用

举报
聚美智数 发表于 2026/01/31 11:06:11 2026/01/31
【摘要】 快递订阅推送API,只需一次订阅,物流状态变动时自动推送至指定URL,无需轮询查询。提升实时性、按单计费降低调用成本,支持JSON格式回调与三次重推机制,显著提高物流信息获取效率与系统性能。

之前笔者介绍了快递查询API接口,主要是需要输入快递单号主动查询,无论物流状态有无变化,都需要主动查询,有可能多次查询的结果是没有变化的。这种方式有一定的不足:

  • 实时性不高,需要每次查询方能知道最新状态。
  • 通常按次计费,无论物流状态有无变化,只要发起查询就计费,增加了查询成本。

有没有实时性更高的,当物流状态发生变化时,主动通知我的API接口呢?答案是有的,即“快递订阅推送API接口”。与主动查询相比,它有以下优点:

  • 提交一次单号,无需频繁手动查询快递状态,提高了获取物流信息的效率和便捷性。
  • 减少查询成本(按单计费),提升系统效率不再需要反复请求接口获取最新状态。

与快递查询接口类似,快递订阅推送API,同样支持1500+快递公司,与官网同步数据更新。

下面来介绍快递订阅推送API接口的使用

快递订阅主要分两步:

  1. 先调用订阅接口,提交单号,发起订阅
  2. 订阅成功后,当物流状态发生变动时,由接口提供者将当前物流状态推送给使用者

详细参阅这里

订阅说明

请求参数

名称 类型 必须 说明
expressCode String 快递公司编号
number String 运单编号
mobile String 顺丰速运、中通、跨越速运需要传入收/寄件人手机号或后四位手机号
callBackUrl String 物流轨迹推送地址,以https/http协议开头,长度不能大于200

推送说明

当物流状态发生变动时,接口提供者将当前物流状态数据推送至接入者提供地址为callBackUrl的接口

数据结构

{
  "expressCode":"EMS", // 快递公司编号 详见:快递公司编码对照表
  "number":"9796578035309",// 运单编号
  "logisticsStatus":"SIGN", // 当前最新物流状态 详见:物流状态编码对照表
  "logisticsStatusDesc":"已签收", // 当前最新物流状态描述
  "details":[ // 完整的物流轨迹
    {
      "time":1632123146000, // 物流变更时间
      "logisticsStatus":"ACCEPT",  // 物流状态 详见:物流状态编码对照表
      "subLogisticsStatus":"ACCEPT", // 物流子状态 详见:物流状态编码对照表
      "desc":"", //物流路由信息描述内容
      "areaCode":"CN330100000000", // 路由节点所在地区行政编码
      "areaName":"浙江省,杭州市" // 路由节路由节点所在地区
    },
    {
      "time":1632140994000,
      "logisticsStatus":"TRANSPORT",
      "subLogisticsStatus":"TRANSPORT",
      "desc":"离开【杭州电商仓配揽投部】,下一站【杭州萧山区东片集散中心】",
      "areaCode":"CN330100000000",
      "areaName":"浙江省,杭州市"
    },
    ...
  ]
}

请求格式

  • application/json

返回接收结果

  • 使用者需要返回接收处理结果返回给接口提供者
  • 如果是接收失败,接口提供者会再次推送,最多推送3次
//接收成功
{
  "success":true
}

// 接收失败
{
  "success":false,
  "msg": "接收失败"
} 

接收示例(java)

@PostMapping("callbackUrl")
public Map<String,Object> receive(@RequestBody String data, HttpServletRequest request) {
  log.info("接收到快递物流推送数据: {}", data);
  ... // 处理自己的业务逻辑
  
  Map<String, Object> result = new HashMap()
  if (处理成功) {
    result.put("success",true);
  } else {
    result.put("success",false);
    result.put("msg","接收失败, xxx");
  }  

  return result;
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。