日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java接入顺丰快递api(有可运行demo)(包括下单、路由查询、路由推送、查询订单状态、取消订单) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

故事發(fā)生的背景: 公司快遞業(yè)務(wù)這一塊之前接入的是快遞100,由于快遞100的推送的實時性沒有達到公司的要求,而且公司全都用的順豐快遞,所以直接接入了順豐快遞的api。demo文章最后下載(新增了json格式請求)
首先, 申請接入流程不多說,這個是申請地址 ,先看一下我在平臺申請的五個api(第一個是默認就有的,也是必須有的,下面四個是自己添加的),如下圖:

我說明一下第一個下單接口和第五個路由推送接口,其他的照葫蘆畫瓢就搞定了,代碼我會放在文章最后給需要的人下載。
重要提示: 下順豐訂單,肯定存在輸入信息有誤取消訂單的情況。所以下順豐訂單傳入的orderId,不要是你項目中的唯一的訂單標(biāo)識符,例如orderNo啊什么的,否則取消順豐訂單后,再次下單傳入同一個orderId時,會下單失敗的,提示:該訂單已取消。
準(zhǔn)備階段: 順豐這邊給了一個jar包–>SF-CSIM-EXPRESS-SDK-V1.6.jar,主要用于加密和網(wǎng)絡(luò)請求,其實打開看看,里面沒啥技術(shù)含量的,加密和請求都可以自己寫,沒必要導(dǎo)包。想圖省事的話直接拷貝出來放到自己項目就行了,注意我圈的三個文件,我就直接導(dǎo)入到項目中修改了一下就開始用了。

下單接口

在開始測試前有個重點:這一點對于測試路由推送很重要,如下圖

把路由推送快遞信息到的地址先配置一下。因為測試環(huán)境下,在我們下單成功后10分鐘內(nèi)(也有15分鐘左右推送的)平臺會給我們推送兩條測試信息。 后面我會說明回調(diào)地址中的代碼如何寫。繼續(xù)回到下單接口,下面我就直接上代碼了,這個最直觀。

/*** 獲取下單請求體* @param expressOrder 快遞信息實體類* @return*/ public static String getOrderServiceRequestXml(ExpressOrder expressOrder) {StringBuilder strBuilder = new StringBuilder();strBuilder.append("<?xml version='1.0' encoding='UTF-8'?>");strBuilder.append("<Request service='OrderService' lang='zh-CN'>");strBuilder.append("<Head>" + CLIENT_CODE + "</Head>");strBuilder.append("<Body>");strBuilder.append("<Order").append(" ");strBuilder.append("orderid='" + expressOrder.getOrderId() + "'").append(" ");// 1 代表順豐標(biāo)快 -- 詳情查看平臺 快件產(chǎn)品類別表,注意:標(biāo)快支持子母單,速配不支持strBuilder.append("express_type='1'").append(" ");// 寄件方信息strBuilder.append("j_province='" + expressOrder.getjProvince() + "'").append(" ");strBuilder.append("j_city='" + expressOrder.getjCity() + "'").append(" ");strBuilder.append("j_county='" + expressOrder.getjCounty() + "'").append(" ");strBuilder.append("j_company='" + expressOrder.getjCompany() + "'").append(" ");strBuilder.append("j_contact='" + expressOrder.getjContact() + "'").append(" ");strBuilder.append("j_tel='" + expressOrder.getjTel() + "'").append(" ");strBuilder.append("j_address='" + expressOrder.getjAddress() + "'").append(" ");// 收件方信息strBuilder.append("d_province='" + expressOrder.getdProvince() + "'").append(" ");strBuilder.append("d_city='" + expressOrder.getdCity() + "'").append(" ");strBuilder.append("d_county='" + expressOrder.getdCounty() + "'").append(" ");strBuilder.append("d_company='" + expressOrder.getdCompany() + "'").append(" ");strBuilder.append("d_tel='" + expressOrder.getdTel() + "'").append(" ");strBuilder.append("d_contact='" + expressOrder.getdContact() + "'").append(" ");strBuilder.append("d_address='" + expressOrder.getdAddress() + "'").append(" ");if (!TextUtils.isEmpty(expressOrder.getRemark())) {strBuilder.append("remark='" + expressOrder.getRemark() + "'").append(" ");}// 貨物信息// 這個參數(shù)是設(shè)置包裹數(shù)量n,n大于1是子母件,一個母單號,其他子單號,需要打印n張快遞單strBuilder.append("parcel_quantity='1'").append(" ");strBuilder.append("pay_method='1'").append(" ");strBuilder.append("custid ='" + CallExpressServiceTools.CUST_ID + "'").append(" ");strBuilder.append("customs_batchs=''").append(" ");strBuilder.append("cargo='醫(yī)藥'").append(">");strBuilder.append("</Order>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}

寫個測試方法:

@Test public void testShunfengOrderService() {ExpressOrder expressOrder = new ExpressOrder();expressOrder.setOrderId("20190121181653954019");expressOrder.setjProvince("廣東省");expressOrder.setjCity("深圳市");expressOrder.setjCounty("南山區(qū)");expressOrder.setjCompany("金草中醫(yī)");expressOrder.setjContact("李大寶");expressOrder.setjTel("18777276920");expressOrder.setjAddress("龍珠四路金谷創(chuàng)業(yè)園c座611");expressOrder.setdProvince("廣東省");expressOrder.setdCity("廣州市");expressOrder.setdCounty("海珠區(qū)");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("響應(yīng)報文:" + respXml); }

測試方法運行后,一種方法可以打印響應(yīng)報文,結(jié)合平臺說明看是否成功。另一種方式是通過平臺的我的沙盒查看,我建議第二鐘方法,因為第二種可以看到更多信息,而且更直觀。如下圖:

路由推送

推送配置方面,我選擇的form方式,

路由推送關(guān)鍵的部分是接收到推送的響應(yīng),必須為post。代碼如下:

@RequestMapping(value="shunfeng/callback", method = RequestMethod.POST) public @ResponseBody String shunFengCallback(String content) {LOGGER.info("順豐路由推送響應(yīng)參數(shù) shunfeng/callback content:{}", content);// 這里可以對接收到的content解析后進行操作ShunFengResponse response = XmlHelper.xmlToBeanForSF(content);return "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +"<Response service=\"RoutePushService\">" +"<Head>OK</Head>" +"</Response>"; }

補充: 關(guān)于順豐訂單下成功以后打印面單的問題。下單成功后可以讓順豐那邊上門取件由順豐打印面單就可以了。也可以自己設(shè)計打印,比如我們公司需要用自己的包裝盒,所以我們是自己打印面單的,我們使用二聯(lián)的格式,布局時html畫出來的,所需內(nèi)容是自己下單填寫的信息和下單成功后返回的信息。順豐那邊提供打印機和打印紙。
新增: demo中新增了json格式請求,已寫好測試用例,直接運行即可。

ok,文章到這里就結(jié)束了,有不對的地方和有疑問的道友們歡迎指正和評論,積分不夠或者鏈接失效的話可以先在評論區(qū)留下郵箱。
代碼下載地址

總結(jié)

以上是生活随笔為你收集整理的java接入顺丰快递api(有可运行demo)(包括下单、路由查询、路由推送、查询订单状态、取消订单)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。