在对接支付宝过程中,发现支付宝每个接口例子,都定义了AlipayClient和xxxRequest、xxxResponse。

老的写法就是每次都去写new一个AlipayClient

package com.jws.smilepay.service;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayUserInfoShareRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserInfoShareResponse;/*** @author liuyg* @date 2022年09月01日 14:09*/public class dome {private static String url = "https://openapi.alipay.com/gateway.do";//应用idprivate static String appid = "app_id";//应用私钥private static String private_key = "your private_key";//支付宝公钥private static String alipay_public_key = "your alipay_public_key";/** * @Author liuyg* @Description 换取授权访问令牌* @Date 2022/9/1 14:10*/public void oauthToken() {AlipayClient alipayClient = new DefaultAlipayClient(url,appid,private_key,"json","GBK",alipay_public_key,"RSA2");AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();request.setGrantType("authorization_code");request.setCode("4b203fe6c11548bcabd8da5bb087a83b");request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");AlipaySystemOauthTokenResponse response = null;try {response = alipayClient.execute(request);} catch (AlipayApiException e) {throw new RuntimeException(e);}if(response.isSuccess()){System.out.println("调用成功");} else {System.out.println("调用失败");}}/** * @Author liuyg* @Description 支付宝会员授权信息查询接口 * @Date 2022/9/1 14:18 * @Param accessToken */public void infoShare(String accessToken){AlipayClient alipayClient = new DefaultAlipayClient(url,appid,private_key,"json","GBK",alipay_public_key,"RSA2");AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();AlipayUserInfoShareResponse response = null;try {response = alipayClient.execute(request,accessToken);} catch (AlipayApiException e) {throw new RuntimeException(e);}if(response.isSuccess()){System.out.println("调用成功");} else {System.out.println("调用失败");}}}

后来发现,调用什么接口要根据入参和返参来定义。所以不需要每个接口都写入这么多的AlipayClient,我们可以把AlipayClient统一封装,只需要定义xxxRequest、xxxResponse即可。

改造后,可以做一些日志记录,数据处理等等。一个调用方法也可以缩减到最少3行的程度!

改造后代码如下:

package com.jws.smilepay.service;import com.alibaba.fastjson.JSONObject;
import com.alipay.api.*;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayUserInfoShareRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserInfoShareResponse;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** @author liuyg* @date 2022年09月01日 14:09*/public class dome {private Logger log = LoggerFactory.getLogger(getClass());private static String url = "https://openapi.alipay.com/gateway.do";//应用idprivate static String appid = "app_id";//应用私钥private static String private_key = "your private_key";//支付宝公钥private static String alipay_public_key = "your alipay_public_key";/*** @Author liuyg* @Description 换取授权访问令牌* @Date 2022/9/1 14:10*/public void oauthToken() {AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();request.setGrantType("authorization_code");request.setCode("4b203fe6c11548bcabd8da5bb087a83b");request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");AlipaySystemOauthTokenResponse response = new AlipaySystemOauthTokenResponse();response = (AlipaySystemOauthTokenResponse) postAli(request, response, null);}/*** @Author liuyg* @Description 支付宝会员授权信息查询接口* @Date 2022/9/1 14:18* @Param accessToken*/public void infoShare(String accessToken) {AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();AlipayUserInfoShareResponse response = new AlipayUserInfoShareResponse();response = (AlipayUserInfoShareResponse) postAli(request, response, accessToken);}/*** @Author liuyg* @Description 支付宝开放平台统一调用接口* @Date 2022/9/1 14:23* @Param request* @Param response* @Param accessToken* @Return com.alipay.api.AlipayResponse*/public AlipayResponse postAli(AlipayRequest request, AlipayResponse response, String accessToken) {long startTime = 0;long endTime = 0;AlipayClient alipayClient = new DefaultAlipayClient(url, appid, private_key, "json", "GBK", alipay_public_key, "RSA2");try {log.info("支付宝请求参数:{}", JSONObject.toJSONString(request));startTime = System.currentTimeMillis();if (StringUtils.isNotBlank(accessToken)) {response = alipayClient.execute(request, accessToken);} else {response = alipayClient.execute(request);}endTime = System.currentTimeMillis();log.info("请求耗时:{},支付宝请求返回参数:{}", endTime - startTime, JSONObject.toJSONString(response));} catch (AlipayApiException e) {log.error("支付宝请求异常:", e);} catch (Exception e) {log.error("发送请求异常,请检查url地址是否正确,网络是否畅通!", e);}return response;}}

原文地址:支付宝开放平台api接口封装统一调用方式 - JavaLYG

支付宝开放平台api接口封装统一调用方式相关推荐

  1. axios封装,api接口封装统一管理

    axios封装,api接口封装统一管理 一. axios说明 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. axios的封装和api接口的统一管理, ...

  2. 开放平台API接口加密,签名策略

    在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,笔者在详细的查阅大量资料后,结合自身的过往经验,对于接口加密及签名的相关知识做了一个系统性的总结,在方便自己查阅的同时也分享给大家做一些参 ...

  3. 淘宝开放平台API接口,接入方案如下

    淘宝开放平台是基于淘宝各类电子商务业务的开放平台,提供外部合作伙伴参与服务淘宝用户的各类原材料,如业务API.账号体系.数据推送,奇门网关等,是淘宝电子商务基础服务的重要开放途径.即淘宝把数据开放进来 ...

  4. 如何快速对接淘宝开放平台API接口(淘宝店铺订单明文接口,淘宝店铺商品上传接口,淘宝店铺订单交易接口)

    很多电商系统的需求场景,都面临淘宝开放平台的接入,但这也是让不少开发者头疼的问题. 那么,如果快速接入呢?东哥的对接经验相信可以帮到不少开发者,快速接入.少走弯路. 1.公共参数 名称 类型 必须 描 ...

  5. 对接极兔速递物流开放平台API接口指南-快递鸟

    什么是快递鸟? 快递鸟是深圳快金数据的一个接口服务品牌,整合1600多家国内外快递物流公司系统,形成统一标准接口,为电商平台.自营商城.打单工具.WMS仓储系统.APP等需要发货的场景,提供专业的物流 ...

  6. 如何对接淘宝开放平台API接口(超详细)

    阿里开放平台:https://open.taobao.com/api.htm?docId=54&docType=2 可以看到,不少接口/能力需要"用户授权".很多系统服务商 ...

  7. 【百度智能云】教程:连接百度ai开放平台api接口并完成语音识别的任务

    前言与介绍 本文章介绍了如何在Pycharm上用python语言简单的对连接百度ai开放平台的语音识别功能api端口的调用,并在代码里实现了现录音识别内容. 平台与相关工具 windows10.Pyc ...

  8. 常用快递电子面单api接口及对接调用方式

    现在电商行业发展很快,很多企业订单量大,手写快递单比较慢,所以开通对接电子面单打印API接口就成了很多企业迫切需要的功能: 目前申请渠道目前有三个,快递公司.菜鸟和快递鸟.前两个对接接口需要一定的资质 ...

  9. 支付宝开放平台API(集分宝接口新上线!)

    - 本帖被 PD_了凡 执行置顶操作(2013-01-24) - API列表 开发工具API  alipay.system.oauth.token  获取授权访问令牌  alipay.user.con ...

最新文章

  1. python gui框架_Python的GUI框架PySide的安装配置教程
  2. struts2 中 Preparable 接口实现数据准备
  3. 修改 IIS 队列长度
  4. android按钮在容器下方,使用flex布局解决安卓手机上固定在底部的按钮,在键盘弹起后挡住input输入框的问题...
  5. 鄂尔多斯借贷迷局:1亿存款被冻结3年无法拿回
  6. CF720C Homework(构造)(暴力)
  7. 利用python进行数据分析_利用python进行数据分析复现(1)
  8. java enummap_Java EnumMap containsValue()方法与示例
  9. 小学生眼里的飞鸽传书
  10. 十法则打造安全无线局域网
  11. 网站性能工具-YSlow的23个规则-网站性能优化
  12. iOS模块化灰度 A/BTest
  13. VSCode的VUE项目侧边栏打开资源管理器中的NPM脚本
  14. ffmpeg生成透明背景视频
  15. 如何在windows下运用dd来下修复坏块?
  16. jquery1.7版本核心模块测试封装
  17. android 表情键盘切换,如何在键盘之间切换(从表情符号到qwerty,反之亦然)
  18. java中金额元转万元工具类
  19. 大学计算机习题汇总及答案
  20. 10款大数据处理编程语言

热门文章

  1. 平板 matlab,MATLAB实现平板平面度数据处理
  2. 智能合约:代币合约、普通合约
  3. 人生格言172条===经典名言
  4. Python图像处理丨带你认识图像量化处理及局部马赛克特效
  5. python 直方图 显示值_python直方图如何显示值?
  6. SQL Server 索引基础知识 1 --- 记录数据的基本格式
  7. CodeForces 997C Sky Full of Stars
  8. C语言的加减乘除及常量和变量
  9. 【vue】实现打印功能
  10. android stringbuilder清空,StringBuffer 清空StringBuffer的实例的三种方法