日常工作中如果有三方给客户发福利类实物的无法追踪物流明细的场景,就需要通过物流单号来定位客户福利的发货进度。

可以采用比较产品化的接口:快递100、聚合数据、51Tracking、快递鸟等专业的物流信息接口API,也可以在阿里云云市场中寻找其他公司提供的一些简单的API或者推送服务。主要是取决于你的性能与量级的要求,再综合考虑预算与售后支撑。

这边考虑到我们是做自己小批量实物订单的追踪,每月1K的量级,所以就简单考虑在阿里云云市场上找一个合适的性价比较高的API。

在云市场的产品,也是提供了便捷明确的文档,可以购买后直接粘贴DEMO使用。售后通过云市场产品购买的入口就可以联系到卖方工程师,基本响应都很快,专人对接,问题能够快速被解决。

一、快递物流订阅接口

场景:
及时性要求高,期望尽快获取最新物流明细

使用:
提交单号的订阅任务,提供回调接口,即可获取最新的物流节点信息

基础配置:

logistics.subscribeHost=https://jumexpress.market.alicloudapi.com
logistics.subscribePath=/express/logistics/subscribe
logistics.subscribeMethod=POST
logistics.subscribeAppcode=**自己的code**

配置类:

@Data
@EnableConfigurationProperties
@Component
@ConfigurationProperties(prefix = "logistics")
public class LogisticsConfig {private static String DEFAULT_SUBSCRIBE_HOST = "https://jumexpress.market.alicloudapi.com";private static String DEFAULT_SUBSCRIBE_PATH = "/express/logistics/subscribe";private static String DEFAULT_METHOD = "POST";private String subscribeHost = DEFAULT_SUBSCRIBE_HOST;private String subscribePath = DEFAULT_SUBSCRIBE_PATH;private String subscribeMethod = DEFAULT_METHOD;private String subscribeAppcode;
}

提交任务与回调:

@Slf4j
@RestController
@RequestMapping("/logistics/subscribe")
public class CallbackController {@Autowiredprivate LogisticsConfig config;@GetMapping("submit")public String submitTask(@RequestParam String number) {Map<String, String> headers = new HashMap<String, String>();headers.put("Authorization", "APPCODE " + config.getSubscribeAppcode());//根据API的要求,定义相对应的Content-Typeheaders.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");Map<String, String> querys = new HashMap<String, String>();Map<String, String> bodys = new HashMap<String, String>();bodys.put("callBackUrl", "http://127.0.0.1:8080/logistics/callback");//本地测试的话需要穿透一个公网Host,供公网回调
//        bodys.put("expressCode", "YTO");   //可选,快递公司编号 例如圆通:YTO,详见产品说明中:快递公司编码对照表 注意:快递公司编号不传时,系统会自动识别快递公司编号,但响应时间会比传递快递编号略长
//        bodys.put("mobile", "mobile");  //看快递公司,顺丰速运/丰网速运需要传入收/寄件人手机号或后四位手机号bodys.put("number", number);//必选,快递运单号String result = "";try {HttpResponse response = HttpUtils.doPost(config.getSubscribeHost(), config.getSubscribePath(), config.getSubscribeMethod(), headers, querys, bodys);log.info(response.toString());result = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);log.info(result);} catch (Exception e) {log.error("err", e);}return result;}/*** {* "expressCode":"EMS", // 快递公司编号 详见:快递公司编码对照表* "number":"9796578035309",// 运单编号* "logisticsStatus":"SIGN", // 当前最新物流状态 详见:物流状态编码对照表* "logisticsStatusDesc":"已签收", // 当前最新物流状态描述* "details":[ // 完整的物流轨迹* {* "time":1632123146000, // 物流变更时间* "logisticsStatus":"ACCEPT", // 物流状态 详见:物流状态编码对照表* "subLogisticsStatus":"ACCEPT", // 物流子状态 详见:物流状态编码对照表* "desc":"【杭州电商仓配揽投部】已收寄,揽投员:刘岭,电话:13754324900", //物流路由信* 息描述内容* "areaCode":"CN330100000000", // 路由节点所在地区行政编码* "areaName":"浙江省,杭州市" // 路由节路由节点所在地区* },* {* "time":1632140994000,* "logisticsStatus":"TRANSPORT",* "subLogisticsStatus":"TRANSPORT",* "desc":"离开【杭州电商仓配揽投部】,下一站【杭州萧山区东片集散中心】",* "areaCode":"CN330100000000",* "areaName":"浙江省,杭州市"* },* ...* ]* }* <p>* {* "success":true* }* // 接收失败* {* "success":false,* "msg": "接收失败"  //自动失败重试,最多推送 3 次。如有疑问可工单联系工程师手动解决* }*/@GetMapping("callback")public Map<String, Object> receive(@RequestBody String data, HttpServletRequest request) {log.info("接收到快递物流推送数据: {}", data);Map<String, Object> map = new HashMap<>();//处理业务逻辑Boolean result = Math.random() > 0.5;if (result) {map.put("success", true);} else {map.put("success", false);map.put("msg", "接收失败, 业务处理失败");}return map;}
}

二、快递物流查询接口

场景:
及时性要求低,可主动发起查询,价格相对低,成本可控

使用:
提交单号进行查询,反馈最新的物流信息

基础配置:

logistics.queryHost=https://jmexpresv2.market.alicloudapi.com
logistics.queryPath=/express/query-v2
logistics.queryMethod=POST
logistics.queryAppcode=**自己的code**

配置类:

@Data
@EnableConfigurationProperties
@Component
@ConfigurationProperties(prefix = "logistics")
public class LogisticsConfig {private static String DEFAULT_QUERY_HOST = "https://jmexpresv2.market.alicloudapi.com";private static String DEFAULT_QUERY_PATH = "/express/query-v2";private static String DEFAULT_METHOD = "POST";private String queryHost = DEFAULT_QUERY_HOST;private String queryPath = DEFAULT_QUERY_PATH;private String queryMethod = DEFAULT_METHOD;private String queryAppcode;
}

查询任务:

@Slf4j
@RestController
@RequestMapping("/logistics/query")
public class QueryController {@Autowiredprivate LogisticsConfig config;/*** 响应的body:* {*   "data": {*     "expressCode": "YTO",*     "expressCompanyName": "圆通快递",*     "number": "YT*****535",*     "logisticsStatus": "SIGN",*     "logisticsStatusDesc": "已签收",*     "theLastMessage": "您******如果您对我们的服务感到满意,请在[评价快递员]处赐予我们五星好评~",*     "theLastTime": "2023-06-05 20:22:50",*     "takeTime": "21小时35分",*     "logisticsTraceDetails": [*       {*         "areaCode": "CN330204000000",*         "areaName": "浙江省,宁波市,江东区",*         "subLogisticsStatus": "ACCEPT",*         "time": 1685874576000,*         "logisticsStatus": "ACCEPT",*         "desc": "您的快****"*       },*       {*         "areaCode": "CN330204000000",*         "areaName": "浙江省,宁波市,江东区",*         "subLogisticsStatus": "TRANSPORT",*         "time": 1685881628000,*         "logisticsStatus": "TRANSPORT",*         "desc": "您的快件****心公司】"*       },*      ...*       {*         "subLogisticsStatus": "STA_INBOUND",*         "time": 1685952305000,*         "logisticsStatus": "DELIVERING",*         "desc": "您的快件****您服务!"*       },*       {*         "subLogisticsStatus": "SIGN",*         "time": 1685967770000,*         "logisticsStatus": "SIGN",*         "desc": "您的快****星好评~"*       }*     ]*   },*   "msg": "成功",*   "success": true,*   "code": 200,*   "taskNo": "9278282****72754862"* }*/@GetMappingpublic String queryOneTime(@RequestParam String number) {Map<String, String> headers = new HashMap<String, String>();headers.put("Authorization", "APPCODE " + config.getQueryAppcode());headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");Map<String, String> querys = new HashMap<String, String>();Map<String, String> bodys = new HashMap<String, String>();
//        bodys.put("expressCode", "YTO"); //可选,快递公司编号 例如圆通:YTO,详见产品说明中:快递公司编码对照表 注意:快递公司编号不传时,系统会自动识别快递公司编号,但响应时间会比传递快递编号略长//bodys.put("mobile", "mobile"); //看快递公司,顺丰速运/丰网速运需要传入收/寄件人手机号或后四位手机号bodys.put("number", number); //必选,快递运单号try {HttpResponse response = HttpUtils.doPost(config.getQueryHost(), config.getQueryPath(), config.getQueryMethod(), headers, querys, bodys);log.info(response.toString());String result =EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); //这边注意指定编码,否则中文会乱码log.info(result);return result;} catch (Exception e) {log.error("err", e);}return "success";}
}

工具类|快递物流的订阅与查询相关推荐

  1. 分享简单又实用的查快递物流方法,一键查询全部快递单号

    随着快递的迅速普及,查询快递成为大多数人的工作需要,如果你有大量的快递单号,那么你是如何快速查询出来快递物流信息呢?下面小编给大家分享一键查询全部快递单号的解决办法,希望以后都可以用到. 准备工具: ...

  2. 大量拼多多快递物流怎么批量跟踪查询?

    现在还有很多拼多多的商家们不知道用什么方法来快速批量查询跟踪大量的快递物流,今天小编就来给大家分享一个可以快速批量查询跟踪大量物流快递的简单方法,下面就一起来看看具体的步骤吧! 首先我们在浏览器搜索[ ...

  3. 快递鸟 物流跟踪订阅 即时查询快递 预约取件(在线下单)

    /*** 快递鸟* 物流跟踪:* 1. 除天天快递.申通快递外,其他主流的快递公司都支持:* 2. 顺丰速运:仅支持通过快递鸟预约取件接口/电子面单接口发货的顺丰单号查询.* 3. 承诺达:仅支持通过 ...

  4. 快递查询工具,批量查询快递物流,并给部分单号标记颜色

    在什么样的情况下才需要一次性查询多家快递的物流,并给单号标记颜色呢?小编猜想,存在这个问题的一般是商家或者快递行业之类的,下面随小编一起用这个技巧来快速查询试试. 需要哪些工具? 快递单号 怎么快速查 ...

  5. SpringBoot(45) 实现快递物流查询(阿里云)

    文章目录 一.前言 二.快递物流查询 三.测试api 本文demo源码 一.前言 本文将基于springboot2.4.0实现快递物流查询,物流信息的获取通过阿里云第三方实现 可参考: https:/ ...

  6. 快速有效率的批量查询快递物流并分析

    对于商家而言,快递物流跟踪是件很重要的事,每天发出的上千单,上万单的快递也是常有的事,那么如何跟踪查询那么多的快递单号物流呢?小编给给大家分享一款查询物流技巧--快递批量查询高手.下面来看一下查询的效 ...

  7. 电商平台快递物流解决方案

    前沿 从事电商行业几年,发表些个人想法,欢迎大家拍砖.电商平台的三流(商流.资金流.物流)是至关重要的三环,缺少了任何一环,平台就没办法玩下去.而其中的物流是重中之重,这就是为什么京东愿意付出那么大的 ...

  8. Android 开源控件与常用开发框架开发工具类

    Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...

  9. 较详细的MongDB工具类

    最近在使用MongoDB这个数据库,总结了有个比较全的工具类,该类是针对MongoDB封装的一个CRUD的工具类, 可以满足常规的数据查询, 数据写入, 数据修改, 数据删除操作. 刚接触MongoD ...

最新文章

  1. OC__part11.1
  2. 极速搭建一个个人博客网站
  3. mysql快速入门_MySQL快速入门(三)
  4. CardLayout使用
  5. 如何利用Chrome工具进行前端js调试
  6. Java连接数据库并实现添加数据有重复不插入数据
  7. linux vsftpd.conf,Linux下的vsftpd配置详解
  8. 实验七 动态分区分配方式的模拟
  9. [ Linux RK3568 ] 手动/自动调整千兆网口延时TX RX |CSDN创作打卡
  10. html查看器缩字数,在线字数统计工具-统计字符字节汉字数字标点符号-计算word文章字数-使用帮助-字的区别...
  11. php添加背景图及设置格式,word文档背景图片怎么设置
  12. animate.css的使用
  13. iOS系统架构和常用框架
  14. 磁盘IOPS概念及IOPS的计算与测试
  15. Redis数据类型实践
  16. 【问题解决】ftp“无法获得目录列表”错误解决办法
  17. RK3399平台开发系列讲解(其他篇)1.11、CPU如何定频
  18. windows文件隐藏
  19. PDF 转图片时丢字的一种可能解决方案
  20. Graph and Chart Study

热门文章

  1. 谷歌浏览器变成白色的解决方法
  2. PyQt(Python+Qt)学习随笔:Qt Designer中部件的enabled属性
  3. js 获取图片原始宽高并等比例缩放
  4. Nginx---入门到放弃系列01
  5. 清除系统LJ.bat 使电脑急速如飞
  6. Windows 环境 python读需kerberos认证的hdfs
  7. 解决Permission denied, please try again问题
  8. org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
  9. NOI2022 游记
  10. RStudio无法成功下载stringi包