一、引入依赖
<dependency>
<groupId>com.seepine</groupId>
<artifactId>spring-boot-starter-pay</artifactId>
<version>0.2.0</version>
</dependency>
二、使用配置
1.配置文件
application.yml
# 支付宝配置
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
@Autowire
private AliPayTemplate aliPayTemplate;
三、方法介绍
1.当面付预下单(返回二维码内容)
返回地址字符串如https://qr.alipay.com/bax04493cwkg8ghn413300b4
,需要自己将其封成二维码图片,此地址可以在手机端直接唤醒支付宝支付,可以当成 PC 的扫码付款,也可以做手机 h5 跳转 app 支付。
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.异步通知回调验签
@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 操作对象
AlipayClient alipayClient = aliPayTemplate.channel().alipayClient();
2.自行对照支付宝官方文档
例如 APP 支付
支付宝 APP 支付文档示例
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("调用失败");
}