【SpringBoot应用篇】接入微信支付

学习尚医通项目做的笔记

微信支付介绍

  1. 开户成功,登录商户平台进行验证
  2. 在线签署协议

开发文档

  1. mch_id:商户号 (配置文件中的partner)
  2. partnerkey:商户密钥

添加依赖

<dependency>
	<groupId>com.github.wxpay</groupId>
	<artifactId>wxpay-sdk</artifactId>
	<version>0.0.3</version>
</dependency>
WXPayUtil.generateNonceStr()

2.MAP转换为XML字符串(自动添加签名)

WXPayUtil.generateSignedXml(param, partnerkey)

3.XML字符串转换为MAP

WXPayUtil.xmlToMap(result)

微信支付开发

依赖

添加配置

在application.properties中添加商户信息

工具类

@Component
public class ConstantPropertiesUtils implements InitializingBean {
          
   
    
    @Value("${weixin.appid}")
    private String appid;

    @Value("${weixin.partner}")
    private String partner;

    @Value("${weixin.partnerkey}")
    private String partnerkey;

    public static String APPID;
    public static String PARTNER;
    public static String PARTNERKEY;
    @Override
    public void afterPropertiesSet() throws Exception {
          
   
        APPID = appid;
        PARTNER = partner;
        PARTNERKEY = partnerkey;
    }
}

显示二维码

核心代码

页面显示

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>支付页面</title>
    <script th:src="@{https://cdn.bootcdn.net/ajax/libs/qrcodejs/1.0.0/qrcode.js}"></script>
    <script th:src="@{https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js}"></script>
</head>

<body>
    <center>
        <div id="qrcode"></div>

    </center>
</body>
<script th:inline="javascript">
    var results = [[${
            
     map}]];
    var parse = JSON.parse(results);
    new QRCode(document.getElementById("qrcode"), parse.codeUrl);  // 设置要生成二维码的链接
 	// 使用定时器每三秒查询一次是否支付成功
   let timer =self.setInterval("querystatus()",3000);

    function querystatus() {
            
     
        $.get(`/api/wx/queryOrder/${ parse.orderId}`,function(data,status){
            
     
            if (data==="支付中"){
            
     
                console.log("支付中");
            } else {
            
     
                clearInterval(int)
                window.location.href="/api/wx/success"
            }
        })
    }
</script>
</html>

支付查询

核心代码

使用定时器每三秒查询一次是否支付成功

let timer =self.setInterval("querystatus()",3000);
 function querystatus() {
          
   
     $.get(`/api/wx/queryOrder/${
            
     parse.orderId}`,function(data,status){
          
   
         if (data==="支付中"){
          
   
             console.log("支付中");
         } else {
          
   
             clearInterval(int)
             window.location.href="/api/wx/success"
         }
     })
 }
经验分享 程序员 微信小程序 职场和发展