0


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

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

前言

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

pom文件顺丰依赖

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

Controller层

/**
     * 生成顺丰丰桥快递订单
     * @param keys
     * @return
     */@PostMapping("createSfOrder")publicResult<FhhzdH> createSfOrder (@RequestBodyList<Long> keys)throwsUnsupportedEncodingException{return service.createSfOrder(keys);}

Service层

/**
     * 生成顺丰丰桥快递订单
     * @param keys
     * @return
     * @throws UnsupportedEncodingException
     */Result<FhhzdH> createSfOrder (List<Long> keys)throwsUnsupportedEncodingException;

ServiceImpl实现类层

/**
     * 生成订单
     */@SuppressWarnings("static-access")@Override@TransactionalpublicResult<FhhzdH>createSfOrder(List<Long> keys)throwsUnsupportedEncodingException{if(keys ==null|| keys.size()==0){returnnewResult<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)){returnnewResult<FhhzdH>().setCode(BussErrorCode.ARGUMENT_NOT_VALID).setReason("单号为"+ key +"发货汇总单数据不存在!");}if(Common.isNotEmpty(fhhzdH.getKddh())){thrownewRuntimeException(String.format("单据号为[%s],快递单号为[%s]已发货", fhhzdH.getDjh(), fhhzdH.getKddh()));}//读取顺丰配置文件loadSfProperties();// 获取发货人信息FhrywhH fhrywhH =Common.requiredFirst(fhrywhHMapper.select(newRmFhrywhHQuery().letBm(fhhzdH.getFhr())),String.format("该%s编码发货人员配置不存在!", fhhzdH.getFhr()));// 封装下单信息String msgData =orderInfo(fhhzdH, fhrywhH, SF_CARD_NO);CallExpressServiceTools tools =CallExpressServiceTools.getInstance();Map<String,String> params =newHashMap<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 =newGson().fromJson(result,ShunFengResponse.class);String apiResultData = res.getApiResultData();ResultData data =newGson().fromJson(apiResultData,ResultData.class);if(data.getSuccess()==true){// 成功String sfdh = data.getMsgData().getWaybillNoInfoList().get(0).getWaybillNo();// 顺丰单号FhhzdH temp =newFhhzdH();
                temp.setDjlsh(key);
                temp.setKddh(sfdh);//顺丰下单返回的顺丰单号更新到自己的数据库,方便后续查询订单
                mapper.updateByPrimaryKeySelective(temp);}else{thrownewRuntimeException(String.format("单据号为[%s],[%s]", fhhzdH.getDjh(), data.getErrorMsg()));}}returnnewResult<FhhzdH>().setCode(BussErrorCode.SUCCESS).setReason("顺丰下单成功!");}

封装请求参数

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

*** 顺丰丰桥下单请求参数
     *@param fhhzdH
     *@param fhrywhH
     *@param sfCardNo
     *@return*/privateStringorderInfo(FhhzdH fhhzdH,FhrywhH fhrywhH,String sfCardNo){SfOrderParam param =newSfOrderParam();List<CargoDetail> cargoList =newArrayList<CargoDetail>();CargoDetail cargo =newCargoDetail();//拖寄物信息
        cargo.setName("工艺品");//货物名称,如果需要生成电子运 单,则为必填。
        cargo.setCount(1L);//货物数量 跨境件报关需要填写
        cargo.setUnit("件");//货物单位,如:个、台、本,跨境 件报关需要填写。
        cargoList.add(cargo);    
        param.setCargoDetails(cargoList);//拖寄物信息    List<ContactInfo> contactInfoList =newArrayList<ContactInfo>();ContactInfo info =newContactInfo();// 获取发货方 省份,城市,县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 =newContactInfo();
        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 =newGson().toJson(param).toString();//把请求参数转成json格式
        log.info("顺丰丰桥下单请求参数:{}", msgData);return msgData;}

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

顺丰丰桥下单响应参数

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

标签: java maven eclipse

本文转载自: https://blog.csdn.net/weixin_45731661/article/details/125599416
版权归原作者 小甘说码 所有, 如有侵权,请联系我们删除。

“对接第三方顺丰丰桥下单Api接口实战教程java”的评论:

还没有评论