赞
踩
在现代的 Web 应用程序开发中,与第三方 API 的集成是非常常见的需求。例如,支付宝、微信等支付平台的支付接口、短信验证码的发送接口、邮件发送接口等。Spring Boot 提供了许多便捷的方式来集成这些第三方 API,本文将介绍如何在 Spring Boot 中集成支付宝和微信支付接口。
在开始之前,我们需要先注册一个支付宝开发者账号,并且创建一个应用。创建应用的过程中,我们需要获取到应用的 APP_ID
、APP_PRIVATE_KEY
、ALIPAY_PUBLIC_KEY
三个值,这些值将在后面的代码中使用。
在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.16.1046.ALL</version>
</dependency>
在代码中初始化支付宝客户端,代码如下:
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");
}
}
在代码中发起支付请求,代码如下:
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(); } }
在上面的代码中,我们首先获取了一个 AlipayClient
对象,该对象需要传入 GATEWAY_URL
、APP_ID
、APP_PRIVATE_KEY
、ALIPAY_PUBLIC_KEY
等参数来初始化。然后我们构造了一个 AlipayTradePagePayRequest
对象,该对象包含了我们需要支付的订单信息,如 out_trade_no
(订单号)、total_amount
(订单金额)、subject
(订单标题)等等。最后,我们通过 alipayClient.pageExecute(request)
方法发起了支付请求,并且返回了支付宝的响应结果。
我们可以将上面的代码整合到 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(); } }
在上面的代码中,我们使用了 Spring Boot 的 @Value
注解来从 application.properties
文件中获取配置信息,这些配置信息包括 appId
、privateKey
、publicKey
、charset
、gatewayUrl
、returnUrl
等等。然后我们将 AliPayUtil
类声明为 Spring Boot 的 @Component
,这样我们就可以在其他 Spring Bean 中使用它了。
在开始之前,我们需要先注册一个微信支付商户账号,并且创建一个应用。创建应用的过程中,我们需要获取到应用的 APP_ID
、MCH_ID
、API_KEY
三个值,这些值将在后面的代码中使用。
在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>3.0.10</version>
</dependency>
在代码中初始化微信支付客户端,代码如下:
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); } }
在上面的代码中,我们首先获取了一个 InputStream
对象,该对象是我们在微信支付商户平台上下载的证书文件,用于证明我们的身份。然后我们构造了一个 WXPayConfigImpl
对象,该对象需要传入 APP_ID
、MCH_ID
、API_KEY
等参数来初始化,同时还需要传入证书文件的 InputStream
。最后,我们通过 new WXPay(wxPayConfig)
方法获取了一个 WXPay
对象。
在代码中发起支付请求,代码如下:
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")); } } }
在上面的代码中,我们首先获取了一个 WXPay
对象,该对象需要传入 APP_ID
、MCH_ID
、API_KEY
等参数来初始化,同时还需要传入证书文件的 InputStream
。然后我们构造了一个 data
对象,该对象包含了我们需要支付的订单信息,如 body
(商品描述)、out_trade_no
(订单号)、fee_type
(货币类型)、total_fee
(订单金额)、spbill_create_ip
(终端IP)等等。最后,我们通过 wxPay.unifiedOrder(data)
方法发起了支付请求,并且返回了微信支付的响应结果。
我们可以将上面的代码整合到 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")); } } }
在上面的代码中,我们使用了 Spring Boot 的 @Value
注解来从 application.properties
文件中获取配置信息,这些配置信息包括 appId
、mchId
、apiKey
、certPath
等等。然后我们将 WxPayUtil
类声明为 Spring Boot 的 @Component
,这样我们就可以在其他 Spring Bean 中使用它了。
在本文中,我们介绍了如何在 Spring Boot 中集成支付宝和微信支付接口。我们首先介绍了如何初始化支付宝和微信支付客户端,然后介绍了如何发起支付请求。最后,我们将这些代码整合到了 Spring Boot 项目中,使得我们可以在 Spring Boot 应用程序中方便地使用支付宝和微信支付接口。
值得一提的是,本文中的代码仅仅是支付接口调用的基础示例,实际在生产环境中,我们需要更多的安全措施,例如在支付请求中添加签名信息、验证支付结果的签名信息等等。同时,我们也需要考虑支付过程中可能出现的异常情况,例如支付超时、支付失败等等,以及如何处理这些异常情况。
总之,集成第三方 API 是一个经常出现的需求,我们需要掌握相关的技能来满足这个需求。希望本文可以帮助你更好地理解在 Spring Boot 中集成支付宝和微信支付接口的基本流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。