SpringBoot 集成 spring-boot-starter-pay 之 支付宝
一、引入依赖
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);
|
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"; }
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");
request.setBizContent(bizContent.toString()); AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); }
|