当我们在开发电商网站时,支付功能是必不可少的。支付宝是国内最常用的第三方支付平台之一,其扫码支付功能也非常受欢迎。本文将为您详细讲解如何使用Spring实现支付宝扫码支付。
准备工作
在开始使用支付宝扫码支付前,我们需要做准备工作:
- 注册支付宝开发者账号,并创建应用
- 引入支付宝SDK
- 在应用中配置支付宝参数,包括应用ID、私钥等信息
- 编写后台代码对接支付宝支付API
引入支付宝SDK
我们可以通过Maven引入支付宝SDK:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.110.ALL</version>
</dependency>
配置支付宝参数
在使用支付宝API前,我们需要通过支付宝开放平台获取应用ID、私钥等信息。获取到这些信息后,我们需要在代码中进行配置:
// 应用ID
private String appId;
// 商户私钥
private String privateKey;
// 支付宝公钥
private String alipayPublicKey;
// 编码格式
private String charset;
// 支付宝网关
private String gatewayUrl;
其中,应用ID、商户私钥和支付宝公钥可以在支付宝开放平台上获取,编码格式一般为UTF-8,支付宝网关统一为 https://openapi.alipay.com/gateway.do
。
发起扫码支付
在完成配置后,我们可以开始编写代码发起支付。以下是一个简单的示例代码:
//1.创建API对应的request
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
//2.设置支付参数
// (1)商户订单号
request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
// (2)订单总金额
+ "\"total_amount\":\"" + totalAmount + "\","
// (3)订单主题
+ "\"subject\":\"" + subject + "\"}");
// (4)设置异步通知地址
request.setNotifyUrl(notifyUrl);
//3.调用API进行支付预下单
AlipayTradePrecreateResponse response = alipayClient.execute(request);
//4.拼接二维码图片URL
String qrCodeUrl = response.getQrCode();
以上代码会通过支付宝API生成一个二维码URL,我们可以直接将该URL生成二维码图片,供用户进行扫码支付。
完整示例代码
以下是一个完整的示例代码,供参考:
@Component
public class AlipayServiceImpl implements AlipayService {
// 应用ID
private String appId;
// 商户私钥
private String privateKey;
// 支付宝公钥
private String alipayPublicKey;
// 编码格式
private String charset;
// 支付宝网关
private String gatewayUrl;
/**
* 发起支付
*
* @param outTradeNo 商户订单号
* @param totalAmount 订单总金额
* @param subject 订单主题
* @param notifyUrl 异步通知地址
* @return 二维码图片URL
* @throws AlipayApiException 支付宝API异常
*/
@Override
public String precreate(String outTradeNo, String totalAmount, String subject, String notifyUrl)
throws AlipayApiException {
// 创建API对应的request
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
// 设置支付参数
request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
+ "\"total_amount\":\"" + totalAmount + "\","
+ "\"subject\":\"" + subject + "\"}");
// 设置异步通知地址
request.setNotifyUrl(notifyUrl);
// 调用API进行支付预下单
AlipayTradePrecreateResponse response = getAlipayClient().execute(request);
// 拼接二维码图片URL
return response.getQrCode();
}
/**
* 获取支付宝客户端
*
* @return 支付宝客户端
*/
private AlipayClient getAlipayClient() {
return new DefaultAlipayClient(gatewayUrl, appId, privateKey,
"json", charset, alipayPublicKey, "RSA2");
}
// getter和setter方法
}
示例说明
以下是两条示例说明:
示例1:生成二维码图片
假设用户购买了一件商品,需要进行扫码支付。我们可以通过如下代码生成二维码图片:
String outTradeNo = "202101010001"; // 订单号
String totalAmount = "0.01"; // 订单总金额
String notifyUrl = "https://example.com/notify"; // 异步通知地址
String subject = "订单标题"; // 订单主题
AlipayServiceImpl alipayService = new AlipayServiceImpl();
String qrCodeUrl = alipayService.precreate(outTradeNo, totalAmount, subject, notifyUrl);
// 将二维码图片URL生成二维码图片
// ...
示例2:处理支付成功通知
当用户支付成功后,支付宝会向应用服务器发送异步通知。应用服务器需要接收并处理该通知,以下是示例代码:
@RequestMapping("/notify")
public void notify(@RequestParam Map<String, String> params) {
// 验签
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, "RSA2");
if (signVerified) {
// 处理业务逻辑
} else {
// 验签失败
}
}
以上代码会通过支付宝提供的SDK验证通知中的签名,确保通知的合法性。然后,我们可以在方法中处理业务逻辑,例如更新订单状态等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring使用支付宝扫码支付 - Python技术站