抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

一、引入依赖

spring-boot-starter-pay 项目地址


<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("调用失败");
}

评论