对接第三方顺丰丰桥下单Api接口实战教程java[通俗易懂]

对接第三方顺丰丰桥下单Api接口实战教程java[通俗易懂]对接第三方顺丰丰桥下单接口实战教程

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

在接入第三方顺丰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
	@Transactional
	public 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); // 顾客编码 ,对应丰桥上获取的clientCode
			params.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对象需要自己处理成自己需要的数据,就不一一演示了
在这里插入图片描述
以上代码看起来很多很复杂,其实是很简单的,实际还可以优化,如果对您有帮助劳烦帮忙点个赞,收藏关注一下,可以相互学习共同进步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193683.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 125 Valid Palindrome

    125 Valid Palindrome

  • C语言 sprintf函数使用详解

    C语言 sprintf函数使用详解srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~头文件:stdio.h函数功能:格式化字符串,将格式化的数据写入字符串中。函数原型:intsprintf(char*buffer,constchar*format,[argument]…)参数:…

  • 免费的java开发工具_Java那些最常用的免费开放工具,分享这15个!

    免费的java开发工具_Java那些最常用的免费开放工具,分享这15个!随着Java行业需求增加,Java工程师岗位薪资节节升高,很多小伙伴想要通过快速的方式掌握Java技能。对于初学Java的小伙伴来说了解一些免费的Java开发工具让我们工作、学习更顺畅,那么免费Java开发工具有哪些?针对这点我汇总了一些,可供参考。1、Java免费开发工具:JDK(Java开发工具包)如果你打算用Java开发一些小程序和应用程序,那么首先得给自己准备一个类似于JDK的工具,其中包…

  • C#MQTTNET客户端使用说明

    C#MQTTNET客户端使用说明C#MQTTNET客户端使用说明1.如何使用1.我想启动MQTT客户端,我该怎么做?2.我想收到服务器发来消息,我该怎么做?3.我想知道客户端是否连接成功,我该怎么做?3.我想知道怎样重连服务器,我该怎么做?1.如何使用1.我想启动MQTT客户端,我该怎么做?try{IMqttClientclient=newMqttFactory().CreateMqttClient();varbuild=newMqttClientOptionsBuilder()//配

  • 校园智能安防监控解决方案

    校园智能安防监控解决方案目前,我国基本上还处于人防和物防的传统状态,技术防控处于起步阶段,尽管政府和校方不断加大人防和物防的投入并取得了一定的效果,但面对日益复杂多变的校园环境和社会因素,暴力犯罪、偷盗抢劫、意外事件时有发生,加之疫情防控常态化趋势,校园里仍旧存在诸多不可控的安全隐患。为更好的应对校园迫切的安全管控及疫情防控常态化需求,提升校园安全监控能力,是社会和校方迫不及待的需求。基于校园安全防控需求,拟在全市中小学和幼儿园中建立“平安校园”“智慧安防”系统,建设一套智能化、可视化、全方位的视频监控系统,并与公安系统实时联

  • 五种常用手机Java编程软件[通俗易懂]

    五种常用手机Java编程软件[通俗易懂]越来越多的朋友都对编程感兴趣,编程需要工具,所以大家也想知道有哪些好用的java编程工具,接下来系哦啊吧就为大家介绍几款常用的相关编程工具。1.JDKJDK-java开发工具包JDK是Java开发工具包,基本上每个研究java的人都首先在机器上安装JDK,那么他有哪些部件呢?下面是运行java时真正工作的四个文件夹:bin、include、lib、jrebin:是最重要的是编译器包括:java和jvm与头文件lib:类库jre:java运行时环境的交互一般用于java程序的开发,而jre只运行类而不编译

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号