连载篇提前看
前情提要
本篇内容承接上篇《物流包裹一站式查询(TrackingMore) 文末所说,顺丰物流关闭了对第三方的物流接口,导致众多第三方物流平台查询不到顺丰快递的物流信息。但是问题终归是要解决滴,别家不行,咱就直接用顺丰自家的。
原本网上找顺丰物流信息查询发现顺丰开放平台 看了下介绍,因为也是顺丰的平台,也没多想,看到流程还是比较清晰的。
本来想找在线客服咨询下,结果发现在线客服有的只是一个群号,而且还不能加人了,于是乎就按照接入流程开始操作,本地都开发的差不多了,后来意外联系到一个顺丰的IT人员,通过他得知,顺丰物流信息接口已经转到另一个部门和平台操作了,这个开放平台已经几乎没有人维护了。于是再他的协助下,我得到了最新的对接文档。按找新文档,之前的开发的全部得重写,请求接口不一样,数据传输和接收方式不一样,由开放平台的Json格式到现在用XML传输。这里贴一下接入规范文档的目录
顺便提一下 顺丰路由查询接口 就是 查询物流信息的接口,不过再顺丰平台使用此接口有个前提条件,就是必须是顺丰的月结用户。登陆 顺丰平台 可以查看到基本信息
注:①不是顺丰月结卡 用户 或者企业,不能接入路由查询 ② 不是通过顺丰接口下单的运单号,不能接入路由推送接口,换而言之,如果是通过顺丰大客户发货系统或者其他方式进行的打单获取到的快递单号,无法对此单进行订阅推送操作。
开发篇
看完基本流程和接入规范之后,就可以按照文档规范进行编码。因为目前我只用到了标红的三个接口,所以接下来对这三个接口一一讲解。
下单接口 1.1. 功能描述下订单接口根据客户需要,可提供以下三个功能:
1) 客户系统向顺丰下发订单。
2) 为订单分配运单号。
3) 筛单(可选,具体商务沟通中双方约定,由顺丰内部为客户配置)。
此接口也用于路由推送注册。客户的顺丰运单号不是通过此下订单接口获取,但却需要获取BSP的路由推送时,需要通过此接口对相应的顺丰运单进行注册以使用BSP的路由推送接口。
按照接入文档所说 接口通信协议支持WEBSERVICE及HTTP/POST协议,以下我是采用HTTP/POST协议 开发
其中 密匙生成规则:
先把XML报文与checkword前后连接。
把连接后的字符串做MD5编码。
把MD5编码后的数据进行Base64编码,此时编码后的字符串即为校验码。
元素的请求和响应内容字段和描述比较多,这里就不一一贴出来了,文末会提供接口文档下载地址。
① 编写下单操作实体类
#region 下单操作实体 public class OrderService { /// <summary> /// 订单号 /// </summary> public string orderid { get; set; } /// <summary> /// 运单号 顺丰运单号,一个订单只能有一个母单号,如果是子母单的情况,以半角逗号分隔,主单号在第一个位置,如 “755123456789,001123456789,002123456789” , /// 对于路由推送注册,此字段为必填。 /// </summary> public string mailno { get; set; } /// <summary> /// 寄件方公司名称,如果需要 生成电子运单,则为必填。 /// </summary> public string j_company { get; set; } /// <summary> /// 寄件方联系人,如果需要生成电子运单,则为必填。 /// </summary> public string j_contact { get; set; } /// <summary> /// 寄件方联系电话,如果需要生成电子运单,则为必填。 /// </summary> public string j_tel { get; set; } /// <summary> /// 寄件方手机 /// </summary> public string j_mobile { get; set; } /// <summary> /// 寄件方详细地址 /// </summary> public string j_address { get; set; } /// <summary> /// 到件方公司名称 /// </summary> public string d_company { get; set; } /// <summary> /// 收件方联系人 /// </summary> public string d_contact { get; set; } /// <summary> /// 收件人联系电话 /// </summary> public string d_tel { get; set; } /// <summary> /// 收件人手机 /// </summary> public string d_mobile { get; set; } /// <summary> /// 收件人详细地址 /// </summary> public string d_address { get; set; } /// <summary> /// 包裹数(1个包裹对应一个运单号) /// </summary> public int parcel_quantity { get; set; } /// <summary> /// 快件产品类别(只有再商务上与顺丰约定的类别方可使用) /// </summary> public string express_type { get; set; } /// <summary> /// 顺丰月结卡号 /// </summary> public string custid { get; set; } /// <summary> /// 备注 /// </summary> public string remark { get; set; } /// <summary> /// 订单元素 /// </summary> public OrderCargo OrderCargos { get; set; } } public class OrderCargo { /// <summary> /// 货物名称 /// </summary> public string name { get; set; } } #endregion