From 718ded0f5f8dd6f1da43b9de2ff20ddc12714007 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 19 九月 2025 18:47:17 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/haizhentong

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxPayController.java |  134 +++++++++++---------------------------------
 1 files changed, 34 insertions(+), 100 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxPayController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxPayController.java
index 8b8d9b2..8e049c0 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxPayController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxPayController.java
@@ -1,8 +1,7 @@
 package com.ruoyi.web.controller.api;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.utils.CodeGenerateUtils;
 import com.ruoyi.framework.web.service.TokenService;
@@ -14,12 +13,11 @@
 import com.ruoyi.system.service.TSysInspectionService;
 import com.ruoyi.system.service.TSysOtherConfigService;
 import com.ruoyi.system.service.TSysPayRecordService;
-import com.ruoyi.system.wxPay.enums.RefundEnum;
 import com.ruoyi.system.wxPay.enums.TradeStateEnum;
 import com.ruoyi.system.wxPay.model.WeixinPayProperties;
-import com.ruoyi.system.wxPay.model.WxPaymentRefundModel;
 import com.ruoyi.system.wxPay.utils.WxTimeUtils;
 import com.ruoyi.system.wxPay.utils.WxV3Pay;
+import com.wechat.pay.contrib.apache.httpclient.util.AesUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -27,8 +25,11 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.PrintWriter;
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.Objects;
 
@@ -73,7 +74,7 @@
         String userId = tokenService.getLoginUserApplet().getUserId();
         TSysAppUser sysAppUser = sysAppUserService.getById(userId);
         // 价格
-        Integer totalPrice = sysOtherConfig.getAiPrice().multiply(new BigDecimal(100)).intValue();
+        Long totalPrice = sysOtherConfig.getAiPrice().multiply(new BigDecimal(100)).longValue();
         // 生成订单号
         String orderNo = CodeGenerateUtils.generateOrderSn();
         // 查询用户信息 用户openid
@@ -81,62 +82,41 @@
         // 存储支付记录
         sysPayRecordService.saveData(orderNo, userId, sysOtherConfig.getAiPrice(), 1);
         // 调用支付方法
-        Map<String, Object> result = wxV3Pay.jsApi(orderNo, totalPrice, openId, weixinPayProperties.getV3().getNotifyPayUrl(),"AI检测报告支付");
+        Map<String, Object> result = wxV3Pay.jsApi(orderNo, totalPrice, openId,"AI检测报告支付","");
         log.info("支付参数:{}", result);
         return R.ok(result);
     }
 
     /**
-     * 微信v3支付-订单退款
-     *
-     * @return
-     */
-    @ApiOperation("订单退款")
-    @PostMapping(value = "refund-order")
-    public AjaxResult<String> refundOrder() {
-         Map<String, Object> result = wxV3Pay.refund(new WxPaymentRefundModel());
-         log.info("退款结果:{}", result);
-        // 微信支付退款单号
-        String refund_id = result.get("refund_id").toString();
-        // 商户退款单号
-        String out_refund_no = result.get("out_refund_no").toString();
-        // 微信支付订单号
-        String transaction_id = result.get("transaction_id").toString();
-        // 商户订单号 tradeNo
-        String out_trade_no = result.get("out_trade_no").toString();
-        // 退款成功时间
-        String success_time = Objects.nonNull(result.get("success_time")) ? result.get("success_time").toString() : null;
-        // 退款状态 RefundEnum
-        String status = result.get("status").toString();
-        // TODO 退款业务处理
-        return AjaxResult.success();
-    }
-    /**
      * 支付回调
      */
     @PostMapping("pay/notify")
     @ApiOperation("订单回调")
-    public void payNotify(HttpServletRequest request) throws Exception {
+    public void payNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
         try {
-            Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {});
-            log.info("支付回调:{}", params);
-            // 商户订单号
-            String tradeNo = params.get("out_trade_no").toString();
-            // 交易状态
-            String trade_state = params.get("trade_state").toString();
-            // 交易状态描述
-            String trade_state_desc = params.get("trade_state_desc").toString();
-            // 微信支付订单号
-            String transaction_id = params.get("transaction_id").toString();
-            // 支付完成时间
-            // 时间不对的话,可以调用  WxTimeUtils.toRfc3339Date(success_time)转换一下
-            String success_time = params.get("success_time").toString();
-            // 附加数据
-            Integer attach = Integer.parseInt(params.get("attach").toString());
+            System.err.println("微信回调");
+            BufferedReader reader = request.getReader();
+            StringBuilder requestBody = new StringBuilder();
+            String line;
+            while ((line = reader.readLine()) != null) {
+                requestBody.append(line);
+            }
+            System.err.println("全部请求体" + requestBody);
+            JSONObject jsonObject = JSONObject.parseObject(requestBody.toString());
+            JSONObject resource = jsonObject.getJSONObject("resource");
+
+            AesUtil aesUtil = new AesUtil(weixinPayProperties.getV3().getApiKey().getBytes(StandardCharsets.UTF_8));
+            String decryptedData = aesUtil.decryptToString(resource.getString("associated_data").getBytes(StandardCharsets.UTF_8), resource.getString("nonce").getBytes(StandardCharsets.UTF_8),
+                    resource.getString("ciphertext"));
+            System.err.println("微信解密的字符串信息" + decryptedData);
+            JSONObject jsonInfo = JSONObject.parse(decryptedData);
+            String out_trade_no = jsonInfo.getString("out_trade_no");
+            String transaction_id = jsonInfo.getString("transaction_id");
+            String trade_state = jsonInfo.getString("trade_state");
+            String success_time = jsonInfo.getString("success_time");
             // 查询订单
             TSysPayRecord sysPayRecord = sysPayRecordService.getOne(Wrappers.lambdaQuery(TSysPayRecord.class)
-                    .eq(TSysPayRecord::getOrderNo, tradeNo).last("LIMIT 1"));
-            // 处理订单
+                    .eq(TSysPayRecord::getOrderNo, out_trade_no).last("LIMIT 1"));
             if (trade_state.equals(TradeStateEnum.SUCCESS.name())) {
                 log.info("回调成功");
                 // 订单号查询订单
@@ -150,60 +130,14 @@
                 sysInspection.setIsPay(1);
                 sysInspectionService.updateById(sysInspection);
 
-                wxV3Pay.ack();
+                PrintWriter out = response.getWriter();
+                out.print("SUCCESS");
+                out.flush();
+                out.close();
             }
-            wxV3Pay.ack();
         } catch (Exception e) {
             log.error("支付回调异常:{}", e, e);
             wxV3Pay.ack(false, e.getMessage());
         }
     }
-    
-    /**
-     * 支付回调成功后
-     */
-    @PostMapping("pay/ack")
-    public void ack(){
-        try {
-            wxV3Pay.ack();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    
-    
-
-    /**
-     * 退款回调
-     */
-    @PostMapping("refund/notify")
-    public void refundNotify(HttpServletRequest request) throws IOException {
-        try {
-            Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {
-            });
-            // 商户订单号
-            String out_trade_no = params.get("out_trade_no").toString();
-            // 商户退款单号
-            String out_refund_no = params.get("out_refund_no").toString();
-            // 微信支付订单号
-            String transaction_id = params.get("transaction_id").toString();
-            // 微信支付退款单号
-            String refund_id = params.get("refund_id").toString();
-            // 退款状态
-            String tradeState = params.get("refund_status").toString();
-            // 退款成功时间
-            // 时间不对的话,可以调用  WxTimeUtils.toRfc3339Date(success_time)转换一下
-            String success_time = params.get("success_time").toString();
-            if (tradeState.equals(RefundEnum.SUCCESS.name())) {
-                wxV3Pay.ack();
-            } else {
-                wxV3Pay.ack(false, "不是成功的退款状态");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            wxV3Pay.ack(false, e.getMessage());
-        }
-    }
-    
 }

--
Gitblit v1.7.1