对接第三方顺丰丰桥下单Api接口实战教程java

news/2024/11/23 23:21:41/

对接第三方顺丰丰桥下单接口实战

  • 前言
    • pom文件顺丰依赖
    • Controller层
    • Service层
    • ServiceImpl实现类层
    • 封装请求参数
    • 顺丰丰桥下单响应参数

前言

在接入第三方顺丰Api之前要先登录LaaS开放平台,如果您是首次与顺丰合作,可通过注册平台账号后登录。
如果您已有开放平台账号,可直接使用账号密码登录。如果您已有月结管家/速打平台/数据灯塔账号,可选择对应登录方式直接登录。如果您是顺丰内部员工,可选择顺丰工号登录方式完成域账号登录。
登录完成后需要进行个人认证或企业认证,如何进行认证小伙伴在顺丰控制台首页认证,认证完成后,需要审核月结卡号哦,如果已经有月结卡号就自行绑定即可,把这些相关信息都完成了,就可以对接顺丰接口啦,话不多说,接下来直接上代码。如果不还有不了解的可以给博主留言哦

pom文件顺丰依赖

pom文件引入顺丰sdk依赖,如何引入外部依赖到内部maven仓库之前的文件有教程,不懂如何引入外部依赖的可以去看我其他文章
在这里插入图片描述

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实现类层

	/*** 生成订单*/@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("请求参数不能为空!");}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("单号为" + key + "发货汇总单数据不存在!");}if (Common.isNotEmpty(fhhzdH.getKddh())) {throw new RuntimeException(String.format("单据号为[%s],快递单号为[%s]已发货", fhhzdH.getDjh(), fhhzdH.getKddh()));}//读取顺丰配置文件loadSfProperties();// 获取发货人信息FhrywhH fhrywhH = Common.requiredFirst(fhrywhHMapper.select(new RmFhrywhHQuery().letBm(fhhzdH.getFhr())),String.format("该%s编码发货人员配置不存在!", 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); // 顾客编码 ,对应丰桥上获取的clientCodeparams.put("requestID", UUID.randomUUID().toString().replace("-", ""));params.put("serviceCode", EXP_RECE_CREATE_ORDER);// 接口服务码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();// 顺丰单号FhhzdH temp = new FhhzdH();temp.setDjlsh(key);temp.setKddh(sfdh);//顺丰下单返回的顺丰单号更新到自己的数据库,方便后续查询订单mapper.updateByPrimaryKeySelective(temp);} else {throw new RuntimeException(String.format("单据号为[%s],[%s]", fhhzdH.getDjh(), data.getErrorMsg()));}}return new Result<FhhzdH>().setCode(BussErrorCode.SUCCESS).setReason("顺丰下单成功!");}

封装请求参数

我自己是使用json格式,也可以使用xml格式,这个可以根据实际情况使用即可,请求参数不需要都要和我的一样,可根据实际开发需要去定义,这只是一个范例,有不了解的小伙伴可留言

*** 顺丰丰桥下单请求参数* @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("工艺品");//货物名称,如果需要生成电子运 单,则为必填。cargo.setCount(1L);//货物数量 跨境件报关需要填写cargo.setUnit("件");//货物单位,如:个、台、本,跨境 件报关需要填写。cargoList.add(cargo);	param.setCargoDetails(cargoList);//拖寄物信息	List<ContactInfo> contactInfoList = new ArrayList<ContactInfo>();ContactInfo info = new ContactInfo();// 获取发货方 省份,城市,县Map<String, String> map = addressResolution(fhrywhH.getJfdz());info.setContactType(1L);//地址类型: 1,寄件方信息 2,到件方信息info.setAddress(fhrywhH.getJfdz());//详细地址info.setCity(map.get("city"));info.setCompany(fhrywhH.getGsmc());info.setContact(fhrywhH.getJjr());// 联系人info.setCounty(map.get("county"));//所在县/区级行政区名称info.setMobile(fhrywhH.getJfdh());//寄方电话info.setProvince(map.get("province"));//所在省级行政区名称	contactInfoList.add(info);map.clear();// 获取收货方 省份,城市,县map = addressResolution(fhhzdH.getShdz());ContactInfo contactInfo = new ContactInfo();contactInfo.setContactType(2L);//地址类型: 1,寄件方信息 2,到件方信息contactInfo.setAddress(fhhzdH.getShdz());//详细地址收货地址contactInfo.setCity(map.get("city"));contactInfo.setCompany(fhhzdH.getMdmc());contactInfo.setContact(fhhzdH.getShouhr());// 收货人contactInfo.setCounty(map.get("county"));//所在县/区级行政区名称contactInfo.setMobile(fhhzdH.getLxdh());//收 联系电话contactInfo.setProvince(map.get("province"));//所在省级行政区名称contactInfoList.add(contactInfo);	param.setContactInfoList(contactInfoList);//收寄双方信息	param.setExpressTypeId(2L);param.setIsOneselfPickup(0L);//快件自取,支持以下值: 1:客户同意快件自取 0:客户不同意快件自取param.setLanguage("zh-CN");//语言param.setOrderId(fhhzdH.getDjh());//客户订单号param.setParcelQty(1L);//包裹数if ("1".equals(fhhzdH.getSfby())) {//付款方式,支持以下值: 1:寄方付 2:收方付 3:第三方付param.setPayMethod(1L); //包邮寄方付}else {param.setPayMethod(2L); //不包邮收方付}		param.setMonthlyCard(sfCardNo);//月结卡号param.setRemark(fhhzdH.getBz());	String msgData = new Gson().toJson(param).toString(); //把请求参数转成json格式log.info("顺丰丰桥下单请求参数:{}", msgData);return msgData;}

下单请求参数json参数示例
在这里插入图片描述

顺丰丰桥下单响应参数

拿到响应参数需要自己处理,因为顺丰返回的是json对象需要自己处理成自己需要的数据,就不一一演示了
在这里插入图片描述
以上代码看起来很多很复杂,其实是很简单的,实际还可以优化,如果对您有帮助劳烦帮忙点个赞,收藏关注一下,可以相互学习共同进步。


http://www.ppmy.cn/news/777861.html

相关文章

通用NER数据集格式转换为JSON格式大全

通用NER数据集格式转换为JSON格式大全 前言1. NER数据集概述1.1 内嵌json1.2 BIO1.3 分层json1.4 BIEO1.5 数据标签分离1.6 标准json 2. BIO_to_JSON3. BIEO_to_JSON4. BMEO_to_JSON5. D_BIO_JSON6. BIO_JSON_to_JSON7. JSON_to_JSON8. JSON_to_JSON总结 前言 最近在做和大模型…

米粉体验升级:小米电视取消电视开机广告

当友商宣布不搭载电视开机广告后&#xff0c;小米的反应速度也是出奇的迅速&#xff0c;现在有网友称小米电视悄悄取消了开机广告&#xff0c;一些米粉打开电视求证后&#xff0c;果然发现开机在出现一行“让每个人都能享受科技的乐趣”的slogan之后&#xff0c;就跳到了瀑布流…

小米红外遥控器如何适配到其他应用设备之上

小米红外遥控器如何适配到其他应用设备之上 最近合作方公司需要匹配小米最新款的红外遥控器到一款电暖设备上&#xff0c;鬼知道为何要使用一个明显的TV遥控器去控制电暖器。不过这都无所谓&#xff0c;客户是衣食父母嘛&#xff0c;尽管他们有的时候会想孩子一样胡闹......所以…

鸿蒙系统小米手机,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?...

原标题&#xff1a;华为鸿蒙系统已经发布&#xff0c;小米等国产手机会使用鸿蒙系统吗&#xff1f; “极客谈科技”&#xff0c;全新视角、全新思路&#xff0c;伴你遨游神奇的科技世界。 鸿蒙系统已于华为全球开发者大会正式发布&#xff0c;荣耀智慧屏将会率先使用鸿蒙系统。…

在VMware上安装Android虚拟机

安装 参考&#xff1a;Installing Android on VMware ESXi:A How-To Guide 简单说一下&#xff0c;安装步骤跟着上面走就完事了&#xff0c;主要是在安装成功后需要进行一个GRUB的修改&#xff0c;步骤如下&#xff1a; 进入系统后&#xff0c;打开虚拟终端&#xff0c;按下面…

199999的小米新车,你会买吗?

关于小米造车的消息都在这里了。 1 小米造车疑云 做为一个小米的mini版股东&#xff0c;我一直都很关注小米的发展&#xff0c;积极了解小米都搞了哪些事情&#xff0c;以及雷军都在忙啥。 家里也买了很多小米的产品&#xff0c;客观来讲&#xff0c;并不是每一个产品都那么好&…

B站小米商城自己写的原码

我上传到gitee上了&#xff0c;链接&#xff1a;hhp/mimiSSM 项目大概介绍&#xff1a; 全局变量&#xff1a;监听器&#xff1a;“typeList” &#xff1a;手机&#xff0c;电脑&#xff0c;电视1&#xff0c;点击“商品管理”&#xff0c;前端访问&#xff1a;http://localh…

win10无线投屏_WIN10笔记本投屏小米电视

WIN10笔记本投屏小米电视 国庆假日小编在家无聊的时候想把WIN10笔记本投屏到自家的小米电视上,在小米电视支持无线Miracast的时候,依然不成功。经过长达半个小时的调试终于弄好了!太麻烦有木有,今天小编就教大家怎么利用无线投屏器,让WIN10笔记本快速投屏到小米电视上。 利…