对接第三方顺丰丰桥下单api接口实战教程java(代码片段)

小甘说码 小甘说码     2023-03-16     127

关键词:

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

前言

在接入第三方顺丰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对象需要自己处理成自己需要的数据,就不一一演示了

以上代码看起来很多很复杂,其实是很简单的,实际还可以优化,如果对您有帮助劳烦帮忙点个赞,收藏关注一下,可以相互学习共同进步。

查快递,对接哪个接口比较好?

快递查询接口可以直接找物流公司对接,也可以找第三方接口服务商一次性对接所有快递公司的查询接口,做的比较好的就是菜鸟、快递鸟,目前淘宝和天猫等阿里的都用菜鸟,其他的大部分电商平台比如美团、云集、凯叔讲故... 查看详情

顺丰电子面单api接口怎么接入?

图示的工具已经对接了顺丰的电子面单,你将订单同步到工具中,然后选择使用顺丰的模板打单,就可以使用顺丰的电子面单接口,非常便捷。参考技术A目前我国电子面单的接口主要有三种方式,分别是快递公司电子面单接口... 查看详情

微信小程序一般去哪里对接一些商品接口

...支付和商家后台,实现商品展示、下单、支付等功能。2.第三方电商平台接口:比如淘宝、京东等电商平台提供了自己的开放平台接口,可以为小程序提供商品展示和下单等功能。3.自搭建API接口:自己搭建的API接口可以作为小... 查看详情

java基础学习总结(180)——如何保证api接口安全

...、摘要在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。... 查看详情

快递查询接口种类及对接方法

...达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是是直接和快递公司合作,第二种虽然是间接对接,但是对接简便,对后期的接口维护可以省很多时间和... 查看详情

国际快递查询轨迹api接口如何对接?

...测试数据传输的稳定性,这边建议使用快递鸟这样的专业第三方接口,快递鸟是可以对接国际上所有主流物流快递公司接口,方便简单。很多大的知名平台都是使用它接的 查看详情

各种电子面单-api接口(顺丰快递鸟菜鸟)(代码片段)

文章目录术语对接接口各家对比各家合作流程对比接口定义及说明RequestParams系统级参数(公共参数)接口参数ResponseParamsJava栗子同类文章术语对于一般人,电子面单的意思可能并不是很了解;说白了,就是快递员给你打... 查看详情

物流一站式查询之顺丰接口篇

...裹一站式查询(TrackingMore)文末所说,顺丰物流关闭了对第三方的物流接口,导致众多第三方物流平台查询不到顺丰快递的物流信息。但是问题终归是要解决滴,别家不行,咱就直接用顺丰自家的。原本网上找顺丰物流信息查询... 查看详情

求快递查询api,想接入一个到自己网站上?

...人负责检查、更新,保证程序正常运行。 参考技术B现在第三方软件一般都对接不到各家快递公司的内网,知道单号可以用快递.哥软件查询物流,如果你是用这个软件打电子面单,寄件记录里面会有物流查询,你可以随时查看物... 查看详情

java实战-01-binance量化机器人api接入(更新中)

目录1、下载开源代码包导入工程2、配置密钥3、下单4、订单查询5、取消订单 6、查询充值地址7、API接口很多,持续探索中。。。 1、下载开源代码包导入工程 查看详情

java实战-01-binance量化机器人api接入(更新中)

目录1、下载开源代码包导入工程2、配置密钥3、下单4、订单查询5、取消订单 6、查询充值地址7、API接口很多,持续探索中。。。 1、下载开源代码包导入工程 查看详情

java实战-01-binance量化机器人api接入(更新中)

目录1、下载开源代码包导入工程2、配置密钥3、下单4、订单查询5、取消订单 6、查询充值地址7、API接口很多,持续探索中。。。 1、下载开源代码包导入工程 查看详情

xrp钱包对接教程

...https://www.uduncloud.com)提供BTC_ETH_USDT_EOS_XRP等主流erc20代币对接交易所钱包充提币_转账支付归集_API/RPC的php/java开发接口。API快捷接入,多币种多地址钱包余额一键归集、私钥冷存储、多级复签、全终端支持。当今世界,假如有朋... 查看详情

分布式技术webapi路由追加htmlaspxshtml适用于对接安卓ios

  首先是这样,在对接安卓和IOS或者是第三方调用的接口,我需要在服务端返回一个带.html/.aspx这样后缀的接口。  例子如下图:http://localhost:64131/api/UsersInfo/GetAllUsersInfo.html      当然,我们用... 查看详情

公众号推送早安问候以及天气预报(java)(代码片段)

...以给指定的微信用户推送消息,经过公众号可以使用第三方接口丰富推送的消息内容百度天气api:添加天气信息推送天行数据api:添加美句、彩虹屁等语句推送通过后台计算纪念日推送…效果图技术栈点springboot实现... 查看详情

第三方库api接口

第三方库API接口InfluxDB提供了各种语言的HttpAPI接口的封装。具体可以看这里:https://docs.influxdata.com/influxdb/v0.10/clients/api/+同时,官方也提供了Telegraf插件来收集数据,除此之外还有collectd等比较常用的第三方数据收集工具。我并不... 查看详情

对接第三方支付接口-记录

  对接支付接口,得知这种第三方的支付接口的对接方式一般为:组装接口需要的参数,以json数据格式或者其他格式(大多数为json),请求第三方支付接口的url,并且将回调的通知地址放在参数中,等支付完成后,一般成功... 查看详情

一张图了解三方支付流程

以下是交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。如图8.6所示。图8.6APP支付时序图商户系统和微信支付系统主要交互说明:步骤1:用户在商户APP中选择商品,... 查看详情