java接入顺丰快递api(包括下单、路由查询、路由推送、查询订单状态、取消订单)

故事发生的背景: 公司快递业务这一块之前接入的是快递100,由于快递100的推送的实时性没有达到公司的要求,而且公司全都用的顺丰快递,所以直接接入了顺丰快递的api

首先, 申请接入流程不多说,这个是申请地址 ,先看一下我在平台申请的五个api(第一个是默认就有的,也是必须有的,下面四个是自己添加的),如下图:
java接入顺丰快递api(包括下单、路由查询、路由推送、查询订单状态、取消订单)_第1张图片
我说明一下第一个下单接口和第五个路由推送接口,其他的照葫芦画瓢就搞定了,代码我会放在文章最后给需要的人下载。
准备阶段: 顺丰这边给了一个jar包–>SF-CSIM-EXPRESS-SDK-V1.6.jar,主要用于加密和网络请求,其实打开看看,里面没啥技术含量的,加密和请求都可以自己写,没必要导包。想图省事的话直接拷贝出来放到自己项目就行了,注意我圈的三个文件,我就直接导入到项目中修改了一下就开始用了。
java接入顺丰快递api(包括下单、路由查询、路由推送、查询订单状态、取消订单)_第2张图片

下单接口

在开始测试前有个重点:这一点对于测试路由推送很重要,如下图
java接入顺丰快递api(包括下单、路由查询、路由推送、查询订单状态、取消订单)_第3张图片
把路由推送快递信息到的地址先配置一下。因为测试环境下,在我们下单成功后10分钟内(也有15分钟左右推送的)平台会给我们推送两条测试信息。 后面我会说明回调地址中的代码如何写。继续回到下单接口,下面我就直接上代码了,这个最直观。

/**
 * 获取下单请求体
 * @param expressOrder 快递信息实体类
 * @return
 */
public static String getOrderServiceRequestXml(ExpressOrder expressOrder) {

        StringBuilder strBuilder = new StringBuilder();
        strBuilder.append("");
        strBuilder.append("");
        strBuilder.append("" + CLIENT_CODE + "");
        strBuilder.append("");
        strBuilder.append("");
        strBuilder.append("");
        strBuilder.append("");
        strBuilder.append("");
        return strBuilder.toString();
    }

写个测试方法:

@Test
public void testShunfengOrderService() {
    ExpressOrder expressOrder = new ExpressOrder();
    expressOrder.setOrderId("20190121181653954019");
    expressOrder.setjProvince("广东省");
    expressOrder.setjCity("深圳市");
    expressOrder.setjCounty("南山区");
    expressOrder.setjCompany("金草中医");
    expressOrder.setjContact("李大宝");
    expressOrder.setjTel("18777276920");
    expressOrder.setjAddress("龙珠四路金谷创业园c座611");
    expressOrder.setdProvince("广东省");
    expressOrder.setdCity("广州市");
    expressOrder.setdCounty("海珠区");
    expressOrder.setdCompany("个人");
    expressOrder.setdContact("滕大宝");
    expressOrder.setdTel("18938905541");
    expressOrder.setdAddress("宝芝林大厦701室");
    String requestXml = RequestXmlUtil.getOrderServiceRequestXml(expressOrder);
    System.out.println("请求报文:" + requestXml);
    String respXml= CallExpressServiceTools.callSfExpressServiceByCSIM(requestXml);
    System.out.println("响应报文:" + respXml);
}

测试方法运行后,一种方法可以打印响应报文,结合平台说明看是否成功。另一种方式是通过平台的我的沙盒查看,我建议第二钟方法,因为第二种可以看到更多信息,而且更直观。如下图:
java接入顺丰快递api(包括下单、路由查询、路由推送、查询订单状态、取消订单)_第4张图片

路由推送

推送配置方面,我选择的form方式,
java接入顺丰快递api(包括下单、路由查询、路由推送、查询订单状态、取消订单)_第5张图片
路由推送关键的部分是接收到推送的响应,必须为post。代码如下:

@RequestMapping(value="shunfeng/callback", method = RequestMethod.POST)
public @ResponseBody String shunFengCallback(String content) {
	LOGGER.info("顺丰路由推送响应参数 shunfeng/callback  content:{}", content);
	// 这里可以对接收到的content解析后进行操作
	ShunFengResponse response = XmlHelper.xmlToBeanForSF(content);
	
	return "" +
			"" +
			"OK" +
			"";
}

ok,文章到这里就结束了,有不对的地方和有疑问的道友们欢迎指正和评论,不够积分下载的同志评论区留下邮箱。
代码下载地址

你可能感兴趣的:(工作中)