抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一、引入依赖

spring-boot-starter-pay 项目地址

1
2
3
4
5
6

<dependency>
<groupId>com.seepine</groupId>
<artifactId>spring-boot-starter-pay</artifactId>
<version>0.2.0</version>
</dependency>

二、使用配置

1.配置文件

application.yml

1
2
3
4
5
6
7
8
9
# 支付宝配置
ali-pay:
server-url: https://openapi.alipay.com/gateway.do
notify-url: http://example.com/pay/ali/notify
app-id: ${your appId}
app-private-key-path: alipay/app_rsa
alipay-public-cert-path: alipay/alipayCertPublicKey_RSA2.crt
alipay-root-cert-path: alipay/alipayRootCert.crt
app-cert-public-key-path: alipay/appCertPublicKey_2021002196600000.crt

2.代码使用

注入 template

1
2
@Autowire
private AliPayTemplate aliPayTemplate;

三、方法介绍

1.当面付预下单(返回二维码内容)

返回地址字符串如https://qr.alipay.com/bax04493cwkg8ghn413300b4,需要自己将其封成二维码图片,此地址可以在手机端直接唤醒支付宝支付,可以当成 PC 的扫码付款,也可以做手机 h5 跳转 app 支付。

1
2
3
4
5
6
7
String qrCodeContent = aliPayTemplate.channel().tradePreCreate(String subject, //商品标题
String outTradeNo, // 商户方自己生成的订单号
Double amount); // 金额,单位元
String qrCodeContent = aliPayTemplate.channel().tradePreCreate(String subject, //商品标题
String outTradeNo, // 商户方自己生成的订单号
Double amount, // 金额,单位元
String timeoutExpress); // 过期时间,如8m则有效时间8分钟,不指定默认2小时

2.异步通知回调验签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RestController
@RequestMapping("pay/ali")
public class PayAliController {

@Autowire
private AliPayTemplate aliPayTemplate;

@ResponseBody
@PostMapping(value = "notify")
public String callback(HttpServletRequest request, HttpServletResponse response) {
AliPayRes res = aliPayTemplate.channel().notify(request.getParameterMap());
// 验签失败
if (!res.getSignVerified()) {
response.setStatus(500);
return "failure";
}
// 验签成功,获取商户方订单号处理逻辑
// res.getOut_trade_no()

return "success";
}
}

四、其他方法

由于仅封装了当面付预下单,若需要接入 App 支付、网站支付等,需要自行获取 AlipayClient 操作

1.获取 AlipayClient 操作对象

1
AlipayClient alipayClient = aliPayTemplate.channel().alipayClient();

2.自行对照支付宝官方文档

例如 APP 支付
支付宝 APP 支付文档示例

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
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setNotifyUrl("需要填写你的支付回调地址");
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "20210817010101004");
bizContent.put("total_amount", 0.01);
bizContent.put("subject", "测试商品");
bizContent.put("product_code", "QUICK_MSECURITY_PAY");
//bizContent.put("time_expire", "2022-08-01 22:00:00");

//// 商品明细信息,按需传入
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);

//// 扩展信息,按需传入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);

request.setBizContent(bizContent.toString());
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}

评论