最近做的项目均涉及到对接多个第三方平台。来谈谈对于对接第三方平台的代码分层。

有些平台会提供SDK,有些平台则只能通过http去调用。每个平台的授权各不相同,每个平台的入参规范不一致。如果是提供了SDK的平台,那么我们引入响应的pom或者jar,然后直接调用,入参和响应适配SDK入参即可。但是如果只能通过http调用的平台,有的入参是驼峰写法,有的入参是是下划线写法,等等。

我们一个项目的入参风格需要统一,不能说一下是驼峰,一下是下划线,而且平台可能会经常改动,这样加大了开发和维护的成本。

我们需要定义统一的入参和响应风格,因此会涉及到我们系统入参或者响应与第三方入参或者响应的转换层,为了方便代码维护,可推荐分为:

ado层,匹配平台的入参,不管是驼峰写法还是驼峰写法,入参和响应均写在这个层面;

client层,匹配平台的方法,每个平台的授权不一样,但是调用平台内的方法时,用的同一套授权,因此,这里可以将授权,post,get写在baseClient,然后具体的方法Client继承baseClient。

service层,供controller层调用的服务层,清洗并转换数据(将我们的驼峰转换成ado适配第三方系统)。

以一个平台为例:

创建订单的接口入参:

ado层

@Data
public class AllJoyCreateOrderADO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "客户参考号")private String reference_no;@ApiModelProperty(value = "客户端ERP")private String from;@ApiModelProperty(value = "运单号")private String shipper_hawbcode;@ApiModelProperty(value = "产品代码")private String shipping_method;
}

baseClient

@Data
public class AllJoyBaseClient {private String appKey;private String appToken;private String service;private Map<String, String> headParams = new HashMap<>();public AllJoyBaseClient(LogisticAlljoyUserEntity entity) {this.sandbox = entity.getSandbox();this.appKey = entity.getAppKey();this.appToken = entity.getAppToken();this.headParams = buildHead();}protected String post(String type, String service, String paramsJson) {// 具体逻辑}/*** 根据类型封装body** @param type* @param service* @param paramsJson* @return*/private String buildBody(String type, String service, String paramsJson) {// 具体逻辑}}

具体的方法client

public class AllJoyClient extends AllJoyBaseClient {public AllJoyClient(LogisticAlljoyUserEntity entity) {super(entity);}/*** 创建订单** @param param* @return*/public BaseShipmentCreateDTO createOrder(LogictisAllJoyCreateOrderParam param) {// 封装入参AllJoyCreateOrderADO allJoyCreateOrderADO = new AllJoyCreateOrderADO(param);String body = JSONObject.toJSONString(allJoyCreateOrderADO);// 处理特殊参数String strParam = body.replaceAll("itemArr", "ItemArr").replaceAll("shipper_lower", "Shipper").replaceAll("consignee_lower", "Consignee");// post请求String data = super.post(AllJoyEnum.RequestEnum.CREATE.getCode(), AllJoyConstant.METHOD_lIST.CREATE_METHOD, strParam);// 处理响应参数String processData = super.getResData(data);Map map = JSONObject.parseObject(processData);BaseShipmentCreateDTO baseShipmentCreateDTO = new BaseShipmentCreateDTO();baseShipmentCreateDTO.setShipmentNo(MapUtils.getString(map, "shipping_method_no"));baseShipmentCreateDTO.setReferenceNo(MapUtils.getString(map, "reference_no"));return baseShipmentCreateDTO;}
}

service层

public interface LogisticAllJoyService {/*** 创建订单** @param param* @return*/BaseShipmentCreateDTO createOrder(LogictisAllJoyCreateOrderParam param);}

service实现类

@Service
public class LogisticAllJoyServiceImpl implements LogisticAllJoyService {@Resourceprivate LogisticAlljoyUserService logisticAlljoyUserService;@Overridepublic BaseShipmentCreateDTO createOrder(LogictisAllJoyCreateOrderParam param) {LogisticAlljoyUserEntity entity = logisticAlljoyUserService.getVerifyUser(param);AllJoyClient allJoyClient = new AllJoyClient(entity);// 代码转换代码省略。。return allJoyClient.createOrder(param);}

}

欢迎大家推荐更好更易维护的方式!调用第三方的http工具类可阅读此文

谈对接多个第三方平台时的代码分层相关推荐

  1. 微信第三方平台授权时域名问题

    最近在处理微信第三方平台的问题,在授权的时候总是提示"请确认授权入口页所在域名,与授权后回调页所在域名相同,并且,此两者都必须与申请第三方平台时填写的授权发起页域名相同." 如提示 ...

  2. 个人APP开发者如何对接聚合广告SDK平台?

    作为个人开发者要想通过APP广告变现是越来越难了,想在应用市场上架APP越来越难,需要提供软著.企业账号等,就连广告平台也不支持个人开发者接入,目前APP广告变现平台的穿山甲.优量汇.快手联盟从21年 ...

  3. 微信第三方平台授权流程- java

    1. 微信第三方平台的开发,第一步就是公众号的授权,授权成功后第三方凭条才能利用公众号的appid和token获得公众账号额信息,并代替公众账号完成一些功能. 2. 授权的流程,理论图 代码流程, 1 ...

  4. 微信开放平台-第三方平台开发配置及常见的问题

    目录 概述 参考文档 开源项目&工具 第三方平台设置 问题及解决方法 概述 本实例:第三方平台+微信公众号(服务号) 微信开放平台-第三方平台,为广大公众号和小程序提供运营服务和行业解决方案. ...

  5. 微信开放平台-第三方平台-全网发布接入【java版本】

    微信给出的文档 概述 在第三方平台方创建成功并最终开发测试完毕,提交全网发布申请时,微信服务器会通过自动化测试的方式,检测服务的基础逻辑是否可用,在确保基础可用的情况下,才会允许公众号第三方平台提交全 ...

  6. 微信第三方平台授权流程说明

    1.消息验证token和消息加解密key(encodingAesKey) encodingAesKey长度固定为 43 个字符,从 a-z,A-Z,0-9 共 62 个字符中选取.由开发者在创建第三方 ...

  7. 微信小程序 一键授权 给第三方平台代开发管理(二,一键授权给第三方平台)

    不是重点,可以忽略: 本人 七月的胜利.代表七月份我出生啦,嘻嘻 博客就是平常记录一些常用到的开发常用到的技术,方法等,看见好东西了就自己整理一下防止以后自己遇到了再找不到. 如果有幸帮到你,欢迎点赞 ...

  8. 微信公众号第三方平台开发笔记--02获取component_verify_ticket

    第三方平台审核通过后,微信服务器会每10分钟向创建第三方平台时填写的授权事件接收URL推送一次component_verify_ticket, 用于获取第三方平台接口调用凭据. /** * 接收微信服 ...

  9. 微信第三方平台开发流程和总结

    微信第三方平台开发流程和总结 创建第三方平台 1).在微信开放平台-管理中心-第三方平台中创建第三方平台账号.创建第三方平台 2).选择"平台型服务商类型"创建第三方平台.填写第三 ...

最新文章

  1. Intent携带额外的数据的方法
  2. 摊牌了,巴塞罗那自治大学3D视觉课件(免费获取)
  3. 15分钟实现AI端计算模型训练、加速与部署 | 百度EasyDL公开课
  4. Django连接mysql数据库
  5. 电路计算机辅助设计上海电力学院,上海电力学院电路计算机辅助设计二端口电路的设计.doc...
  6. springboot 获取application参数_(最新 9000 字 )Spring Boot 配置特性解析
  7. 翻译:打造Edge渲染内核的浏览器
  8. 方立勋_30天掌握JavaWeb_JSP
  9. 使用gradle多渠道打包
  10. C# 8 新提案让泛型 Attribute 成为现实
  11. C语言关系 是行还是列,C语言行优先和列优先的问题深入分析
  12. Html跨页面调用函数,一个cshtml如何在另一个cshtml中调用一个函数?
  13. html的课设作业6,第七节课html标签元素属性作业-2019-9-6 作业
  14. python 退出自定义函数_python通过自定义异常,提前退出方法
  15. ReentrantReadWriteLock源码解读
  16. 天降公网ip | 你也许已经有公网IP了
  17. 国务院公布《关键信息基础设施安全保护条例》
  18. [情侣空间] 基于spring boot的自制情侣空间
  19. 第7章 Stata相关性分析
  20. 手机计算机怎么缩小桌面图标,桌面图标怎么变小-iPhone图标突然变大?不要方,来看看这几招...

热门文章

  1. PHP 将长文本按规定字数分割到数组
  2. Head First 设计模式——装饰者模式
  3. 制作系统启动盘和制作windows+Ubuntu双系统启动盘
  4. 离线下载是一个什么样的功能
  5. 王叁寿:只有数据源服务商才有资格构建大数据生态圈
  6. if和elseif连用的一些细节问题
  7. 担心电脑摄像头被监控 Win11电脑如何禁用摄像头
  8. 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)
  9. 阿里云点播Hls标准加密简单搭建过程
  10. 德国iF多项大奖加冕,这副耳机有多强?音珀GTW 270 Hybrid深度评测