当前位置:   article > 正文

Spring Boot 集成支付宝、微信等支付平台API_微信支付通知接口springboot

微信支付通知接口springboot

Spring Boot 集成支付宝、微信等支付平台API

在现代的 Web 应用程序开发中,与第三方 API 的集成是非常常见的需求。例如,支付宝、微信等支付平台的支付接口、短信验证码的发送接口、邮件发送接口等。Spring Boot 提供了许多便捷的方式来集成这些第三方 API,本文将介绍如何在 Spring Boot 中集成支付宝和微信支付接口。

在这里插入图片描述

集成支付宝支付接口

1. 准备工作

在开始之前,我们需要先注册一个支付宝开发者账号,并且创建一个应用。创建应用的过程中,我们需要获取到应用的 APP_IDAPP_PRIVATE_KEYALIPAY_PUBLIC_KEY 三个值,这些值将在后面的代码中使用。

2. 添加依赖

pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.16.1046.ALL</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

3.编写代码

3.1 初始化支付宝客户端

在代码中初始化支付宝客户端,代码如下:

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;

public class AliPayUtil {
    private static final String APP_ID = "your_app_id";
    private static final String APP_PRIVATE_KEY = "your_app_private_key";
    private static final String ALIPAY_PUBLIC_KEY = "alipay_public_key";
    private static final String CHARSET = "UTF-8";
    private static final String GATEWAY_URL = "https://openapi.alipay.com/gateway.do";

    public static AlipayClient getAlipayClient() {
        return new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
3.2 发起支付请求

在代码中发起支付请求,代码如下:

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;

public class AliPayUtil {
    // 省略上面的代码

    public static String pay(String outTradeNo, String totalAmount, String subject, String returnUrl) throws AlipayApiException {
        AlipayClient alipayClient = getAlipayClient();

        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl(returnUrl);
        request.setNotifyUrl("your_notify_url");

        request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
                + "\"total_amount\":\"" + totalAmount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
        return response.getBody();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在上面的代码中,我们首先获取了一个 AlipayClient 对象,该对象需要传入 GATEWAY_URLAPP_IDAPP_PRIVATE_KEYALIPAY_PUBLIC_KEY 等参数来初始化。然后我们构造了一个 AlipayTradePagePayRequest 对象,该对象包含了我们需要支付的订单信息,如 out_trade_no(订单号)、total_amount(订单金额)、subject(订单标题)等等。最后,我们通过 alipayClient.pageExecute(request) 方法发起了支付请求,并且返回了支付宝的响应结果。

4. 整合到 Spring Boot 项目中

我们可以将上面的代码整合到 Spring Boot 项目中,使得我们可以在 Spring Boot 应用程序中方便地使用支付宝支付接口。下面是整合到 Spring Boot 的代码:

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class AliPayUtil {
    @Value("${alipay.appId}")
    private String appId;

    @Value("${alipay.privateKey}")
    private String privateKey;

    @Value("${alipay.publicKey}")
    private String publicKey;

    @Value("${alipay.charset}")
    private String charset;

    @Value("${alipay.gatewayUrl}")
    private String gatewayUrl;

    @Value("${alipay.returnUrl}")
    private String returnUrl;

    public AlipayClient getAlipayClient() {
        return new DefaultAlipayClient(gatewayUrl, appId, privateKey, "json", charset, publicKey, "RSA2");
    }

    public String pay(String outTradeNo, String totalAmount, String subject) throws AlipayApiException {
        AlipayClient alipayClient = getAlipayClient();

        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl(returnUrl);
        request.setNotifyUrl("your_notify_url");

        request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
                + "\"total_amount\":\"" + totalAmount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
        return response.getBody();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

在上面的代码中,我们使用了 Spring Boot 的 @Value 注解来从 application.properties 文件中获取配置信息,这些配置信息包括 appIdprivateKeypublicKeycharsetgatewayUrlreturnUrl 等等。然后我们将 AliPayUtil 类声明为 Spring Boot 的 @Component,这样我们就可以在其他 Spring Bean 中使用它了。

集成微信支付接口

1. 准备工作

在开始之前,我们需要先注册一个微信支付商户账号,并且创建一个应用。创建应用的过程中,我们需要获取到应用的 APP_IDMCH_IDAPI_KEY 三个值,这些值将在后面的代码中使用。

2. 添加依赖

pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>3.0.10</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

3. 编写代码

3.1 初始化微信支付客户端

在代码中初始化微信支付客户端,代码如下:

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayConfigImpl;

import java.io.InputStream;

public class WxPayUtil {
    private static final String APP_ID = "your_app_id";
    private static final String MCH_ID = "your_mch_id";
    private static final String API_KEY = "your_api_key";

    public static WXPay getWXPay() throws Exception {
        InputStream inputStream = WxPayUtil.class.getResourceAsStream("/cert/apiclient_cert.p12");
        WXPayConfigImpl wxPayConfig = WXPayConfigImpl.getInstance(APP_ID, MCH_ID, API_KEY, inputStream);

        return new WXPay(wxPayConfig);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在上面的代码中,我们首先获取了一个 InputStream 对象,该对象是我们在微信支付商户平台上下载的证书文件,用于证明我们的身份。然后我们构造了一个 WXPayConfigImpl 对象,该对象需要传入 APP_IDMCH_IDAPI_KEY 等参数来初始化,同时还需要传入证书文件的 InputStream。最后,我们通过 new WXPay(wxPayConfig) 方法获取了一个 WXPay 对象。

3.2 发起支付请求

在代码中发起支付请求,代码如下:

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayUtil;

import java.util.HashMap;
import java.util.Map;

public class WxPayUtil {
    // 省略上面的代码

    public static Map<String, String> pay(String outTradeNo, String totalFee, String body, String spbillCreateIp) throws Exception {
        WXPay wxPay = getWXPay();

        Map<String, String> data = new HashMap<>();
        data.put("body", body);
        data.put("out_trade_no", outTradeNo);
        data.put("device_info", "");
        data.put("fee_type", "CNY");
        data.put("total_fee", totalFee);
        data.put("spbill_create_ip", spbillCreateIp);
        data.put("notify_url", "your_notify_url");
        data.put("trade_type", "NATIVE");

        Map<String, String> response = wxPay.unifiedOrder(data);
        if ("SUCCESS".equals(response.get("return_code")) && "SUCCESS".equals(response.get("result_code"))) {
            return response;
        } else {
            throw new Exception(response.get("return_msg"));
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

在上面的代码中,我们首先获取了一个 WXPay 对象,该对象需要传入 APP_IDMCH_IDAPI_KEY 等参数来初始化,同时还需要传入证书文件的 InputStream。然后我们构造了一个 data 对象,该对象包含了我们需要支付的订单信息,如 body(商品描述)、out_trade_no(订单号)、fee_type(货币类型)、total_fee(订单金额)、spbill_create_ip(终端IP)等等。最后,我们通过 wxPay.unifiedOrder(data) 方法发起了支付请求,并且返回了微信支付的响应结果。

4. 整合到 Spring Boot 项目中

我们可以将上面的代码整合到 Spring Boot 项目中,使得我们可以在 Spring Boot 应用程序中方便地使用微信支付接口。下面是整合到 Spring Boot 的代码:

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayConfigImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

@Component
public class WxPayUtil {
    @Value("${wxpay.appId}")
    private String appId;

    @Value("${wxpay.mchId}")
    private String mchId;

    @Value("${wxpay.apiKey}")
    private String apiKey;

    @Value("${wxpay.certPath}")
    private Resource certPath;

    public WXPay getWXPay() throws Exception {
        InputStream inputStream = certPath.getInputStream();
        WXPayConfigImpl wxPayConfig = WXPayConfigImpl.getInstance(appId, mchId, apiKey, inputStream);

        return new WXPay(wxPayConfig);
    }

    public Map<String, String> pay(String outTradeNo, String totalFee, String body, String spbillCreateIp) throws Exception {
        WXPay wxPay = getWXPay();

        Map<String, String> data = new HashMap<>();
        data.put("body", body);
        data.put("out_trade_no", outTradeNo);
        data.put("device_info", "");
        data.put("fee_type", "CNY");
        data.put("total_fee", totalFee);
        data.put("spbill_create_ip", spbillCreateIp);
        data.put("notify_url", "your_notify_url");
        data.put("trade_type", "NATIVE");

        Map<String, String> response = wxPay.unifiedOrder(data);
        if ("SUCCESS".equals(response.get("return_code")) && "SUCCESS".equals(response.get("result_code"))) {
            return response;
        } else {
            throw new Exception(response.get("return_msg"));
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

在上面的代码中,我们使用了 Spring Boot 的 @Value 注解来从 application.properties 文件中获取配置信息,这些配置信息包括 appIdmchIdapiKeycertPath 等等。然后我们将 WxPayUtil 类声明为 Spring Boot 的 @Component,这样我们就可以在其他 Spring Bean 中使用它了。

结论

在本文中,我们介绍了如何在 Spring Boot 中集成支付宝和微信支付接口。我们首先介绍了如何初始化支付宝和微信支付客户端,然后介绍了如何发起支付请求。最后,我们将这些代码整合到了 Spring Boot 项目中,使得我们可以在 Spring Boot 应用程序中方便地使用支付宝和微信支付接口。

值得一提的是,本文中的代码仅仅是支付接口调用的基础示例,实际在生产环境中,我们需要更多的安全措施,例如在支付请求中添加签名信息、验证支付结果的签名信息等等。同时,我们也需要考虑支付过程中可能出现的异常情况,例如支付超时、支付失败等等,以及如何处理这些异常情况。

总之,集成第三方 API 是一个经常出现的需求,我们需要掌握相关的技能来满足这个需求。希望本文可以帮助你更好地理解在 Spring Boot 中集成支付宝和微信支付接口的基本流程。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/804333
推荐阅读
相关标签
  

闽ICP备14008679号