顺丰物流接口:
准备:
参数:
- partenerId 顾客编码
- requestId 请求唯一号UUID
- serviceCode 调取接口的服务代码
- timestamp 时间戳
- msgDigest 数字签名(数字签名认证)
- msgData 业务数据
通信:
- 通讯协议:HTTP
- 提交方式:POST
- 请求头:“Content-type”,"application/x-www-form-urlencoded”
- 字符集编码:UTF-8
- 业务数据统一以字符串格式放在msgData字段
响应
- apiResultCode 响应结果码
- apiErrorMsg 异常信息
- apiResponseID 响应号
- apiResultData 业务处理结果
鉴权(数字签名认证):
- msgDigest(数字签名)
- 包含:msgData(业务报文)+timestamp(时间戳)+checkWord(客户校验码)
- 经过URLEncoder.encode((msgData+timeStamp+checkWord),“UTF-8”)后进行MD5
- 最后在转换为Base64字符串
物流流程:
1、下单:
商家发货,系统向顺丰下订单,顺丰会返回顺丰运单号
方案:
-
商家进行发货,传入参数
-
按照格式:订单id-商品id = 将传入物流的订单id),寄付双发信息,托寄物品信息等参数信息,一个订单n个包裹须调用n次物流系统传入参数
-
由平台发送参数信息给到物流系统
-
物流系统接收参数信息,把参数信息作为msgData加入公共请求参数,然后根据msgData+timestamp+checkWord(客户校验码)得到数字签名(msgDigesg)
-
物流系统调用顺丰平台api
-
顺丰平台会先进行鉴权再进行参数校验,都成功的情况下,返回顺丰运单号,订单号等信息。
-
再由物流系统返回顺丰给的信息给平台
(返回的订单号是由系统订单号id-商品id;当一个订单有多个包裹时,运单号一一对应着此订单中的某商品;例如订单A01中有商品a,b,需要两个包裹。传入物流系统,调用顺丰返回运单号A101,A102;订单A01-a对应A101,A01-b对应A102)
-
平台拿到订单号后分解为订单id 商品id 顺丰单号;将商品和顺丰号id关联起来。
数据库中可存为(订单id与商品id存为复合主键):
订单id 商品id 顺丰单号 …
A01 a A101 …
A01 b A102 …
2、查询下订单的结果:
用于在未收到返回数据时,查询订单创建接口客户订单当前的处理情况
方案:
- 商家在系统进行查询
- 传入所查询的订单号(客户订单号-商品id),订单的类型(正向/退货),返回的语言给物流系统
- 物流系统把参数放入msgData,然后根据msgData+timestamp+checkWord(客户校验码)得到数字签名(msgDigesg)
- 调用顺丰,传入参数
- 顺丰进行鉴权和参数校验
- 返回订单结果到物流系统
- 物流系统将结果返回到商城系统
- 商城系统拿到后对订单进行修改状态
3、查询物流路由:
1)根据顺丰运单号查询
2)根据客户订单号查询
3)根据运单号+运单对应的收寄人任一方电话号码后4位查询
返回全部路由节点信息
方案:
- 用户在商城系统查看快递路由
- 传入订单号(客户订单号-商品id)或者顺丰单号,查询类型,路由类型,返回语言
- 物流系统把参数放入msgData,然后根据msgData+timestamp+checkWord(客户校验码)得到数字签名(msgDigesg)
- 调用顺丰,传入参数
- 顺丰进行鉴权和参数校验
- 返回结果(传入订单号,返回订单号,传入顺丰单号,返回顺丰单号)到物流系统
- 物流系统返回结果到商城系统
- 商城系统拿到路由点展示在页面中
4、订单取消
取消此订单(订单号不重复利用)
方案:
- 商家取消此顺丰单,在商城系统进行点击
- 传入取消操作的标识符,订单号等参数到物流系统
- 物流系统把参数放入msgData,然后根据msgData+timestamp+checkWord(客户校验码)得到数字签名(msgDigesg)
- 调用顺丰Api,传入参数
- 顺丰进行鉴权和参数校验
- 返回结果(订单号,运单号)到物流系统
- 物流系统返回结果到商城系统
- 商城系统对此订单进行状态更改为已取消
- 通知商家取消订单成功