Browse Source

feat:“添加汇付微信正扫支付参数“

soobin 1 year ago
parent
commit
707002765b

+ 58 - 30
src/main/java/com/szwl/controller/TOrderController.java

@@ -95,6 +95,9 @@ public class TOrderController {
     TSzsmWxService szsmWxService;
 
     @Autowired
+    WechatPayInfoService wechatPayInfoService;
+
+    @Autowired
     private THuifuTempOrderService huifuTempOrderService;
 
     @Autowired
@@ -4902,38 +4905,63 @@ public class TOrderController {
                     result = HuifuConstant.SZ_JUMP_URL + "/#/popPayment?status=1";
                 }
             } else {
-                String openid;
-                if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
-                    // 获取openid
-                    try {
-                        String openUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
-                                "appid=" + HuifuConstant.SC_WX_SUB_APP_ID +
-                                "&secret=" + HuifuConstant.SC_WX_APP_SECRET +
-                                "&code=" + code +
-                                "&grant_type=authorization_code";
-                        log.info("获取openID:{}", openUrl);
-                        org.json.JSONObject jsonObject = HttpClientUtils.get(openUrl);
-                        log.info("获取openID结果:{}", jsonObject);
-                        openid = jsonObject.getString("openid");
-                        result = huifuMchService.payWechat(order, openid);
-                    } catch (Exception e) {
-                        e.printStackTrace();
+                // 查询是否有支付参数
+                WechatPayInfo wechatPayInfo = wechatPayInfoService.getById(sn);
+                if (wechatPayInfo != null) {
+                    String timeStamp = wechatPayInfo.getTimeStamp();
+                    String nonceStr = wechatPayInfo.getNonceStr();
+                    String packageValue = wechatPayInfo.getPackageValue();
+                    String paySign = wechatPayInfo.getPaySign();
+                    if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+                        result = HuifuConstant.SC_JUMP_URL + "/#/popPayment?" +
+                                "sn=" + sn +
+                                "&timeStamp=" + timeStamp +
+                                "&nonceStr=" + nonceStr +
+                                "&package=" + packageValue +
+                                "&paySign=" + paySign;
+                    } else {
+                        result = HuifuConstant.SZ_JUMP_URL + "/#/popPayment?" +
+                                "sn=" + sn +
+                                "&timeStamp=" + timeStamp +
+                                "&nonceStr=" + nonceStr +
+                                "&package=" + packageValue +
+                                "&paySign=" + paySign;
                     }
+                    log.info("微信支付链接:{}", result);
                 } else {
-                    // 获取openid
-                    try {
-                        String openUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
-                                "appid=" + HuifuConstant.SZ_WX_SUB_APP_ID +
-                                "&secret=" + HuifuConstant.SZ_WX_APP_SECRET +
-                                "&code=" + code +
-                                "&grant_type=authorization_code";
-                        log.info("获取openID:{}", openUrl);
-                        org.json.JSONObject jsonObject = HttpClientUtils.get(openUrl);
-                        log.info("获取openID结果:{}", jsonObject);
-                        openid = jsonObject.getString("openid");
-                        result = huifuMchService.payWechat(order, openid);
-                    } catch (Exception e) {
-                        e.printStackTrace();
+                    String openid;
+                    if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+                        // 获取openid
+                        try {
+                            String openUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
+                                    "appid=" + HuifuConstant.SC_WX_SUB_APP_ID +
+                                    "&secret=" + HuifuConstant.SC_WX_APP_SECRET +
+                                    "&code=" + code +
+                                    "&grant_type=authorization_code";
+                            log.info("获取openID:{}", openUrl);
+                            org.json.JSONObject jsonObject = HttpClientUtils.get(openUrl);
+                            log.info("获取openID结果:{}", jsonObject);
+                            openid = jsonObject.getString("openid");
+                            result = huifuMchService.payWechat(order, openid);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    } else {
+                        // 获取openid
+                        try {
+                            String openUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
+                                    "appid=" + HuifuConstant.SZ_WX_SUB_APP_ID +
+                                    "&secret=" + HuifuConstant.SZ_WX_APP_SECRET +
+                                    "&code=" + code +
+                                    "&grant_type=authorization_code";
+                            log.info("获取openID:{}", openUrl);
+                            org.json.JSONObject jsonObject = HttpClientUtils.get(openUrl);
+                            log.info("获取openID结果:{}", jsonObject);
+                            openid = jsonObject.getString("openid");
+                            result = huifuMchService.payWechat(order, openid);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
                     }
                 }
             }

+ 16 - 0
src/main/java/com/szwl/mapper/WechatPayInfoMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.WechatPayInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-07-18
+ */
+public interface WechatPayInfoMapper extends BaseMapper<WechatPayInfo> {
+
+}

+ 19 - 0
src/main/java/com/szwl/mapper/xml/WechatPayInfoMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.WechatPayInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.WechatPayInfo">
+        <id column="sn" property="sn" />
+        <result column="time_stamp" property="timeStamp" />
+        <result column="nonce_str" property="nonceStr" />
+        <result column="package_value" property="packageValue" />
+        <result column="pay_sign" property="paySign" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        sn, time_stamp, nonce_str, package_value, pay_sign
+    </sql>
+
+</mapper>

+ 39 - 0
src/main/java/com/szwl/model/entity/WechatPayInfo.java

@@ -0,0 +1,39 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-07-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="WechatPayInfo对象", description="")
+public class WechatPayInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "订单号")
+    @TableId(value = "sn", type = IdType.ASSIGN_ID)
+    private String sn;
+
+    private String timeStamp;
+
+    private String nonceStr;
+
+    private String packageValue;
+
+    private String paySign;
+
+
+}

+ 16 - 0
src/main/java/com/szwl/service/WechatPayInfoService.java

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.WechatPayInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-07-18
+ */
+public interface WechatPayInfoService extends IService<WechatPayInfo> {
+
+}

+ 52 - 42
src/main/java/com/szwl/service/impl/THuifuMchServiceImpl.java

@@ -14,10 +14,7 @@ import com.szwl.feign.bean.SzwlFeign;
 import com.szwl.mapper.THuifuMchMapper;
 import com.szwl.model.bo.R;
 import com.szwl.model.entity.*;
-import com.szwl.service.THuifuMchService;
-import com.szwl.service.THuifuTempOrderService;
-import com.szwl.service.TOrderDetailsService;
-import com.szwl.service.TOrderService;
+import com.szwl.service.*;
 import com.szwl.utils.HuifuUtils;
 import com.szwl.utils.IDGenerator;
 import lombok.extern.slf4j.Slf4j;
@@ -32,7 +29,7 @@ import java.util.TreeMap;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author wuhs
@@ -54,6 +51,9 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
     @Autowired
     SzwlFeign szwlFeign;
 
+    @Autowired
+    WechatPayInfoService wechatPayInfoService;
+
     @Override
     public String uniPay(String orderNo, BigDecimal amount, String productName,
                          String productDesc, String notifyUrl, String frpCode,
@@ -64,19 +64,19 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         JSONObject request = new JSONObject();
         request.put("req_seq_id", orderNo);
         request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
             request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
         } else {
             request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
         }
-        if(frpCode.equals("ALIPAY_NATIVE")) {
+        if (frpCode.equals("ALIPAY_NATIVE")) {
             request.put("trade_type", "A_NATIVE");
         }
-        if(frpCode.equals("WEIXIN_XCX")) {
+        if (frpCode.equals("WEIXIN_XCX")) {
             request.put("trade_type", "T_MINIAPP");
             JSONObject wxData = new JSONObject();
-            wxData.put("sub_appid",appid);
-            wxData.put("open_id",openId);
+            wxData.put("sub_appid", appid);
+            wxData.put("open_id", openId);
             request.put("wx_data", wxData);
         }
         request.put("trans_amt", amount);
@@ -94,16 +94,16 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         requestData.put("product_id", HuifuConstant.PRODUCT_ID);
         requestData.put("sign", sign);
         requestData.put("data", request);
-        System.out.println("请求体:"+ requestData);
+        System.out.println("请求体:" + requestData);
         String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
         JSONObject result = JSONObject.parseObject(success);
         JSONObject data = result.getJSONObject("data");
         String qrCode = data.getString("qr_code");
         String payInfo = data.getString("pay_info");
-        if(frpCode.equals("ALIPAY_NATIVE")){
+        if (frpCode.equals("ALIPAY_NATIVE")) {
             return qrCode;
         }
-        if(frpCode.equals("WEIXIN_XCX")) {
+        if (frpCode.equals("WEIXIN_XCX")) {
             return payInfo;
         }
         return null;
@@ -118,7 +118,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         request.put("req_seq_id", sn);
         request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
         String companyType = huifuTempOrder.getCompanyType();
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
             request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
         } else {
             request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
@@ -130,8 +130,8 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
         String client6 = clientId.substring(clientId.length() - 6);
         String productName1 = "";
-        if(huifuTempOrder.getProductNumber() > 1) {
-            if(equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
+        if (huifuTempOrder.getProductNumber() > 1) {
+            if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
                 productName1 = "棉花糖-" + equipment.getName() + "-" + client6;
             } else {
                 productName1 = "爆米花-" + equipment.getName() + "-" + client6;
@@ -146,12 +146,12 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         request.put("acct_split_bunch", huifuTempOrder.getAcctSplitBunch());
         // 微信支付配置
         JSONObject wxData = new JSONObject();
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
-            wxData.put("sub_appid",HuifuConstant.SC_WX_SUB_APP_ID);
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+            wxData.put("sub_appid", HuifuConstant.SC_WX_SUB_APP_ID);
         } else {
-            wxData.put("sub_appid",HuifuConstant.SZ_WX_SUB_APP_ID);
+            wxData.put("sub_appid", HuifuConstant.SZ_WX_SUB_APP_ID);
         }
-        wxData.put("open_id",openid);
+        wxData.put("open_id", openid);
         request.put("wx_data", wxData);
         // 签名:sign
         String s = JSON.toJSONString(request);
@@ -163,7 +163,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         requestData.put("product_id", HuifuConstant.PRODUCT_ID);
         requestData.put("sign", sign);
         requestData.put("data", request);
-        System.out.println("请求体:"+ requestData);
+        System.out.println("请求体:" + requestData);
         String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
         // 拿到返回参数
         JSONObject result = JSONObject.parseObject(success);
@@ -181,15 +181,15 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         String paySign = payInfoJson.getString("paySign");
         // 测试链接:http://szwltest.sunzee.com.cn/shenze
         String resultUrl = "";
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
-            resultUrl = HuifuConstant.SC_JUMP_URL+"/#/popPayment?" +
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+            resultUrl = HuifuConstant.SC_JUMP_URL + "/#/popPayment?" +
                     "sn=" + sn +
                     "&timeStamp=" + timeStamp +
                     "&nonceStr=" + nonceStr +
                     "&package=" + packageValue +
                     "&paySign=" + paySign;
         } else {
-            resultUrl = HuifuConstant.SZ_JUMP_URL+"/#/popPayment?" +
+            resultUrl = HuifuConstant.SZ_JUMP_URL + "/#/popPayment?" +
                     "sn=" + sn +
                     "&timeStamp=" + timeStamp +
                     "&nonceStr=" + nonceStr +
@@ -199,7 +199,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         log.info("微信支付链接:{}", resultUrl);
         // 保存订单到数据库
         TOrder tOrder = new TOrder();
-        String[] ignoreProperties = {"id", "createDate","sn"};
+        String[] ignoreProperties = {"id", "createDate", "sn"};
         BeanUtil.copyProperties(huifuTempOrder, tOrder, ignoreProperties);
         tOrder.setId(IDGenerator.orderID());
         tOrder.setSn(sn);
@@ -214,7 +214,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         orderDetails.setRefundStatus("0");
         orderDetails.setEquipmentId(huifuTempOrder.getEquipmentId());
         orderDetails.setMachineType(huifuTempOrder.getMachineType());
-        if(huifuTempOrder.getProductNumber() != null && huifuTempOrder.getProductNumber() > 1) {
+        if (huifuTempOrder.getProductNumber() != null && huifuTempOrder.getProductNumber() > 1) {
             Map<String, String> map = new HashMap<>();
 
             String[] products = huifuTempOrder.getNote().split(",");
@@ -264,7 +264,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         JSONObject request = new JSONObject();
         request.put("req_seq_id", orderNo);
         request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
             request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
         } else {
             request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
@@ -277,7 +277,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         request.put("acct_split_bunch", acctSplitBunch.toJSONString());
         // 安全信息
         JSONObject riskCheckData = new JSONObject();
-        riskCheckData.put("ip_addr","47.112.127.131");
+        riskCheckData.put("ip_addr", "47.112.127.131");
         request.put("risk_check_data", riskCheckData);
         // 签名:sign
         String s = JSON.toJSONString(request);
@@ -289,14 +289,14 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         requestData.put("product_id", HuifuConstant.PRODUCT_ID);
         requestData.put("sign", sign);
         requestData.put("data", request);
-        System.out.println("请求体:"+ requestData);
-        log.info("请求体:{}",requestData);
+        System.out.println("请求体:" + requestData);
+        log.info("请求体:{}", requestData);
         String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
         JSONObject result = JSONObject.parseObject(success);
         JSONObject data = result.getJSONObject("data");
         String transStat = data.getString("trans_stat");
         String respDesc = data.getString("resp_desc");
-        if(transStat.equals(HuifuConstant.TRANS_STAT_S) || transStat.equals(HuifuConstant.TRANS_STAT_P)) {
+        if (transStat.equals(HuifuConstant.TRANS_STAT_S) || transStat.equals(HuifuConstant.TRANS_STAT_P)) {
             return HuifuConstant.RESP_CODE_0;
         } else {
             return respDesc;
@@ -312,7 +312,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         request.put("req_seq_id", sn);
         request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
         String companyType = order.getCompanyType();
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
             request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
         } else {
             request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
@@ -324,8 +324,8 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
         String client6 = clientId.substring(clientId.length() - 6);
         String productName1 = "";
-        if(order.getProductNumber() > 1) {
-            if(equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
+        if (order.getProductNumber() > 1) {
+            if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
                 productName1 = "棉花糖-" + equipment.getName() + "-" + client6;
             } else {
                 productName1 = "爆米花-" + equipment.getName() + "-" + client6;
@@ -339,12 +339,12 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         request.put("acct_split_bunch", order.getAcctSplitBunch());
         // 微信支付配置
         JSONObject wxData = new JSONObject();
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
-            wxData.put("sub_appid",HuifuConstant.SC_WX_SUB_APP_ID);
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+            wxData.put("sub_appid", HuifuConstant.SC_WX_SUB_APP_ID);
         } else {
-            wxData.put("sub_appid",HuifuConstant.SZ_WX_SUB_APP_ID);
+            wxData.put("sub_appid", HuifuConstant.SZ_WX_SUB_APP_ID);
         }
-        wxData.put("open_id",openid);
+        wxData.put("open_id", openid);
         request.put("wx_data", wxData);
         // 签名:sign
         String s = JSON.toJSONString(request);
@@ -356,7 +356,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         requestData.put("product_id", HuifuConstant.PRODUCT_ID);
         requestData.put("sign", sign);
         requestData.put("data", request);
-        System.out.println("请求体:"+ requestData);
+        System.out.println("请求体:" + requestData);
         String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
         // 拿到返回参数
         JSONObject result = JSONObject.parseObject(success);
@@ -372,16 +372,26 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         String packageValue = payInfoJson.getString("package");
         // 获取paySign的值
         String paySign = payInfoJson.getString("paySign");
+
+        // 保存支付参数
+        WechatPayInfo wechatPayInfo = new WechatPayInfo();
+        wechatPayInfo.setSn(sn);
+        wechatPayInfo.setTimeStamp(timeStamp);
+        wechatPayInfo.setNonceStr(nonceStr);
+        wechatPayInfo.setPackageValue(packageValue);
+        wechatPayInfo.setPaySign(paySign);
+        wechatPayInfoService.save(wechatPayInfo);
+
         String resultUrl = "";
-        if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
-            resultUrl = HuifuConstant.SC_JUMP_URL+"/#/popPayment?" +
+        if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
+            resultUrl = HuifuConstant.SC_JUMP_URL + "/#/popPayment?" +
                     "sn=" + sn +
                     "&timeStamp=" + timeStamp +
                     "&nonceStr=" + nonceStr +
                     "&package=" + packageValue +
                     "&paySign=" + paySign;
         } else {
-            resultUrl = HuifuConstant.SZ_JUMP_URL+"/#/popPayment?" +
+            resultUrl = HuifuConstant.SZ_JUMP_URL + "/#/popPayment?" +
                     "sn=" + sn +
                     "&timeStamp=" + timeStamp +
                     "&nonceStr=" + nonceStr +

+ 20 - 0
src/main/java/com/szwl/service/impl/WechatPayInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.WechatPayInfo;
+import com.szwl.mapper.WechatPayInfoMapper;
+import com.szwl.service.WechatPayInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-07-18
+ */
+@Service
+public class WechatPayInfoServiceImpl extends ServiceImpl<WechatPayInfoMapper, WechatPayInfo> implements WechatPayInfoService {
+
+}