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

在对接支付宝过程中,发现支付宝每个接口例子,都定义了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";
    //应用id
    private 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";
    //应用id
    private 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Java调用支付宝支付接口,您可以使用支付宝开放平台的即时到账接口。首先,您需要在支付宝开放平台注册并获得相应的API密钥。接下来,您可以使用Spring MVC和MyBatis等框架进行开发。 具体的实现步骤如下: 1. 在您的Spring MVC项目中,使用支付宝开放平台提供的即时到账接口进行支付宝支付的集成。您可以使用支付宝提供的SDK或者API,根据文档中的指引进行配置和调用。 2. 在商品发起购买时,您可以调用支付宝接口,将用户的支付信息发送给支付宝,跳转到支付宝页面进行支付。 3. 支付宝会在用户完成支付后,通过回调通知您的系统支付状态的变更。您可以在接收到支付宝的回调通知后,更新订单状态或进行其他业务处理。 4. 您可以选择将支付功能单独封装为一个项目,然后在其他项目中调用支付接口,也可以将支付功能整合到您的项目中。为了方便维护,您可以将相关的类放到您的项目中,并引入相应的支付宝SDK或jar包。 总体来说,使用Java调用支付宝支付接口可以通过支付宝开放平台的即时到账接口实现,具体的实现步骤根据您的项目架构和需求可能会有所不同。但无论如何,您都需要注册支付宝开放平台账号并获取API密钥,然后根据支付宝提供的文档进行配置和调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lsetea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值