对接第三方顺丰丰桥下单Api接口实战教程java
對(duì)接第三方順豐豐橋下單接口實(shí)戰(zhàn)
- 前言
- pom文件順豐依賴
- Controller層
- Service層
- ServiceImpl實(shí)現(xiàn)類層
- 封裝請(qǐng)求參數(shù)
- 順豐豐橋下單響應(yīng)參數(shù)
前言
在接入第三方順豐Api之前要先登錄LaaS開(kāi)放平臺(tái),如果您是首次與順豐合作,可通過(guò)注冊(cè)平臺(tái)賬號(hào)后登錄。
如果您已有開(kāi)放平臺(tái)賬號(hào),可直接使用賬號(hào)密碼登錄。如果您已有月結(jié)管家/速打平臺(tái)/數(shù)據(jù)燈塔賬號(hào),可選擇對(duì)應(yīng)登錄方式直接登錄。如果您是順豐內(nèi)部員工,可選擇順豐工號(hào)登錄方式完成域賬號(hào)登錄。
登錄完成后需要進(jìn)行個(gè)人認(rèn)證或企業(yè)認(rèn)證,如何進(jìn)行認(rèn)證小伙伴在順豐控制臺(tái)首頁(yè)認(rèn)證,認(rèn)證完成后,需要審核月結(jié)卡號(hào)哦,如果已經(jīng)有月結(jié)卡號(hào)就自行綁定即可,把這些相關(guān)信息都完成了,就可以對(duì)接順豐接口啦,話不多說(shuō),接下來(lái)直接上代碼。如果不還有不了解的可以給博主留言哦
pom文件順豐依賴
pom文件引入順豐sdk依賴,如何引入外部依賴到內(nèi)部maven倉(cāng)庫(kù)之前的文件有教程,不懂如何引入外部依賴的可以去看我其他文章
Controller層
/*** 生成順豐豐橋快遞訂單* @param keys* @return*/@PostMapping("createSfOrder")public Result<FhhzdH> createSfOrder (@RequestBody List<Long> keys) throws UnsupportedEncodingException {return service.createSfOrder(keys);}Service層
/*** 生成順豐豐橋快遞訂單* @param keys* @return* @throws UnsupportedEncodingException*/Result<FhhzdH> createSfOrder (List<Long> keys) throws UnsupportedEncodingException;ServiceImpl實(shí)現(xiàn)類層
/*** 生成訂單*/@SuppressWarnings("static-access")@Override@Transactionalpublic Result<FhhzdH> createSfOrder(List<Long> keys) throws UnsupportedEncodingException {if (keys == null || keys.size() == 0) {return new Result<FhhzdH>().setCode(BussErrorCode.ARGUMENT_NOT_VALID).setReason("請(qǐng)求參數(shù)不能為空!");}for (int i = 0; i < keys.size(); i++) {Long key = keys.get(i);FhhzdH fhhzdH = mapper.selectByPrimaryKey(key);if (Common.isNull(fhhzdH)) {return new Result<FhhzdH>().setCode(BussErrorCode.ARGUMENT_NOT_VALID).setReason("單號(hào)為" + key + "發(fā)貨匯總單數(shù)據(jù)不存在!");}if (Common.isNotEmpty(fhhzdH.getKddh())) {throw new RuntimeException(String.format("單據(jù)號(hào)為[%s],快遞單號(hào)為[%s]已發(fā)貨", fhhzdH.getDjh(), fhhzdH.getKddh()));}//讀取順豐配置文件loadSfProperties();// 獲取發(fā)貨人信息FhrywhH fhrywhH = Common.requiredFirst(fhrywhHMapper.select(new RmFhrywhHQuery().letBm(fhhzdH.getFhr())),String.format("該%s編碼發(fā)貨人員配置不存在!", fhhzdH.getFhr())); // 封裝下單信息String msgData = orderInfo(fhhzdH, fhrywhH, SF_CARD_NO);CallExpressServiceTools tools = CallExpressServiceTools.getInstance();Map<String, String> params = new HashMap<String, String>();String timeStamp = String.valueOf(System.currentTimeMillis()); // String msgData =tools.packageMsgData(standardService);params.put("partnerID", CLIENT_CODE); // 顧客編碼 ,對(duì)應(yīng)豐橋上獲取的clientCodeparams.put("requestID", UUID.randomUUID().toString().replace("-", ""));params.put("serviceCode", EXP_RECE_CREATE_ORDER);// 接口服務(wù)碼params.put("timestamp", timeStamp);params.put("msgData", msgData);params.put("msgDigest", tools.getMsgDigest(msgData, timeStamp, CHECK_WORD));String result = HttpClientUtil.post(CALL_URL_BOX, params);ShunFengResponse res = new Gson().fromJson(result, ShunFengResponse.class);String apiResultData = res.getApiResultData();ResultData data = new Gson().fromJson(apiResultData, ResultData.class);if (data.getSuccess() == true) {// 成功String sfdh = data.getMsgData().getWaybillNoInfoList().get(0).getWaybillNo();// 順豐單號(hào)FhhzdH temp = new FhhzdH();temp.setDjlsh(key);temp.setKddh(sfdh);//順豐下單返回的順豐單號(hào)更新到自己的數(shù)據(jù)庫(kù),方便后續(xù)查詢訂單mapper.updateByPrimaryKeySelective(temp);} else {throw new RuntimeException(String.format("單據(jù)號(hào)為[%s],[%s]", fhhzdH.getDjh(), data.getErrorMsg()));}}return new Result<FhhzdH>().setCode(BussErrorCode.SUCCESS).setReason("順豐下單成功!");}封裝請(qǐng)求參數(shù)
我自己是使用json格式,也可以使用xml格式,這個(gè)可以根據(jù)實(shí)際情況使用即可,請(qǐng)求參數(shù)不需要都要和我的一樣,可根據(jù)實(shí)際開(kāi)發(fā)需要去定義,這只是一個(gè)范例,有不了解的小伙伴可留言
*** 順豐豐橋下單請(qǐng)求參數(shù)* @param fhhzdH* @param fhrywhH* @param sfCardNo* @return*/private String orderInfo(FhhzdH fhhzdH, FhrywhH fhrywhH,String sfCardNo) {SfOrderParam param = new SfOrderParam();List<CargoDetail> cargoList = new ArrayList<CargoDetail>();CargoDetail cargo = new CargoDetail();//拖寄物信息cargo.setName("工藝品");//貨物名稱,如果需要生成電子運(yùn) 單,則為必填。cargo.setCount(1L);//貨物數(shù)量 跨境件報(bào)關(guān)需要填寫cargo.setUnit("件");//貨物單位,如:個(gè)、臺(tái)、本,跨境 件報(bào)關(guān)需要填寫。cargoList.add(cargo); param.setCargoDetails(cargoList);//拖寄物信息 List<ContactInfo> contactInfoList = new ArrayList<ContactInfo>();ContactInfo info = new ContactInfo();// 獲取發(fā)貨方 省份,城市,縣Map<String, String> map = addressResolution(fhrywhH.getJfdz());info.setContactType(1L);//地址類型: 1,寄件方信息 2,到件方信息info.setAddress(fhrywhH.getJfdz());//詳細(xì)地址info.setCity(map.get("city"));info.setCompany(fhrywhH.getGsmc());info.setContact(fhrywhH.getJjr());// 聯(lián)系人info.setCounty(map.get("county"));//所在縣/區(qū)級(jí)行政區(qū)名稱info.setMobile(fhrywhH.getJfdh());//寄方電話info.setProvince(map.get("province"));//所在省級(jí)行政區(qū)名稱 contactInfoList.add(info);map.clear();// 獲取收貨方 省份,城市,縣map = addressResolution(fhhzdH.getShdz());ContactInfo contactInfo = new ContactInfo();contactInfo.setContactType(2L);//地址類型: 1,寄件方信息 2,到件方信息contactInfo.setAddress(fhhzdH.getShdz());//詳細(xì)地址收貨地址contactInfo.setCity(map.get("city"));contactInfo.setCompany(fhhzdH.getMdmc());contactInfo.setContact(fhhzdH.getShouhr());// 收貨人contactInfo.setCounty(map.get("county"));//所在縣/區(qū)級(jí)行政區(qū)名稱contactInfo.setMobile(fhhzdH.getLxdh());//收 聯(lián)系電話contactInfo.setProvince(map.get("province"));//所在省級(jí)行政區(qū)名稱contactInfoList.add(contactInfo); param.setContactInfoList(contactInfoList);//收寄雙方信息 param.setExpressTypeId(2L);param.setIsOneselfPickup(0L);//快件自取,支持以下值: 1:客戶同意快件自取 0:客戶不同意快件自取param.setLanguage("zh-CN");//語(yǔ)言param.setOrderId(fhhzdH.getDjh());//客戶訂單號(hào)param.setParcelQty(1L);//包裹數(shù)if ("1".equals(fhhzdH.getSfby())) {//付款方式,支持以下值: 1:寄方付 2:收方付 3:第三方付param.setPayMethod(1L); //包郵寄方付}else {param.setPayMethod(2L); //不包郵收方付} param.setMonthlyCard(sfCardNo);//月結(jié)卡號(hào)param.setRemark(fhhzdH.getBz()); String msgData = new Gson().toJson(param).toString(); //把請(qǐng)求參數(shù)轉(zhuǎn)成json格式log.info("順豐豐橋下單請(qǐng)求參數(shù):{}", msgData);return msgData;}下單請(qǐng)求參數(shù)json參數(shù)示例
順豐豐橋下單響應(yīng)參數(shù)
拿到響應(yīng)參數(shù)需要自己處理,因?yàn)轫権S返回的是json對(duì)象需要自己處理成自己需要的數(shù)據(jù),就不一一演示了
以上代碼看起來(lái)很多很復(fù)雜,其實(shí)是很簡(jiǎn)單的,實(shí)際還可以優(yōu)化,如果對(duì)您有幫助勞煩幫忙點(diǎn)個(gè)贊,收藏關(guān)注一下,可以相互學(xué)習(xí)共同進(jìn)步。
總結(jié)
以上是生活随笔為你收集整理的对接第三方顺丰丰桥下单Api接口实战教程java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: flutter友盟分享_flutter友
- 下一篇: 华工计算机基础知识随堂作业答案,新版华工