工具类|快递物流的订阅与查询

news/2024/10/18 19:22:08/

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

可以采用比较产品化的接口:快递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";}
}

http://www.ppmy.cn/news/239934.html

相关文章

AI文本生成视频,根据文字就能一键生成视频的模型

const name "AI生成视频";console.log(name); 可以从给定的文字内容就能生成短视频&#xff0c;基于文本到图像生成技术&#xff0c;该技术旨在实现文本到视频的生成&#xff0c;可以通过文本生成独一无二的视频&#xff0c;将无限的想象力带入生活。 我们来看看文…

商品领域十二张基础表设计思路与实现

1 文章概述 商品在电商领域中是一个非常重要的领域&#xff0c;交易行为前提是有商品信息存在。本文我们分析商品表基本设计&#xff0c;其它复杂场景可以在此基础上进行扩展。需要说明第一本文所用数据是测试数据&#xff0c;可能与真实数据有偏差&#xff0c;仅供演示。第二…

K210奇怪问题

K210TTL问题 TPS54331供5V&#xff0c;ISP-RXD引脚对地加入TVS管后&#xff0c;导致显示屏花屏问题&#xff0c;可复现&#xff0c;去掉后正常显示&#xff0c;原因不明。 tvs型号SMF5.0CA&#xff0c;SMF6.5CA均会出现同样问题。 采用电脑USB供电&#xff0c;没有此问题。 串…

i510600kf 参数 i5 10600kf怎么样

酷睿i5-10600Kf基于祖传的14nm制程工艺&#xff0c;全新的LGA 1200接口设计&#xff0c;拥有6核12线程&#xff0c;默认主频4.1Ghz&#xff0c;最大睿频4.8Ghz&#xff0c;三级缓存为12MB&#xff0c;支持超频&#xff0c;设计功耗125W。 i5-10600Kf配什么主板 看完你就知道了 …

NVIDIA GPU的计算能力 Compute Capability 一览

数据出处&#xff1a;https://developer.nvidia.com/cuda-gpus 提示&#xff1a;利用浏览器的搜索功能&#xff08;CtrlF&#xff09;&#xff0c;查询自身GPU的计算性能 如&#xff0c;想知道GTX980Ti的计算能力&#xff0c;在搜索框中键入&#xff1a;GTX 980 Ti即可&#…

[cuda][转载]cuda算力表

地址&#xff1a;https://developer.nvidia.com/zh-cn/cuda-gpus Tesla 工作站产品 GPU计算能力Tesla K803.7Tesla K403.5Tesla K203.5Tesla C20752.0Tesla C2050 或 C20702.0 NVIDIA 数据中心产品 GPU计算能力NVIDIA A1008.0NVIDIA T47.5NVIDIA V1007.0Tesla P1006.0Tesla …

大无语死凌晨两点刚准备更新掘金专栏,结果发现掘金给我降级了......

最近比较有热情整理一下我自己的知识体系&#xff0c;然后就开了一个专栏javascript核心 然后我对应的在我的github上建了个仓库[ JavaScript_Interview_Everything]&#xff0c;就是更全面的整理我的知识体系&#xff0c;我觉得成型的专题会发到掘金上。 还有很多&#xff0c;…

KU115 FPGA 高性能万兆光纤网络硬件加速卡 / 2 路 10G 光纤数据加速卡

PCIE721 是一款基于 PCI Express 总线架构的 2 路 10G 光纤数 据加速卡&#xff0c;该板卡为半高半长 PCIe 卡&#xff0c;可用于目前主流半高机箱的服务器或超微工作站。 板卡采用 Xilinx Ultra Scale 系列 FPGA 作为主处理器&#xff0c;具有 2 组 72 位 DDR4 SDRAM 作为高速…