From b27be3dc80bd5f62385557d68f88bb1599507d27 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 13 十一月 2025 17:44:30 +0800
Subject: [PATCH] 小程序接口

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxPayController.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 53 insertions(+), 0 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 cab3d7d..fb5628d 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
@@ -2,11 +2,13 @@
 
 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.R;
 import com.ruoyi.common.utils.CodeGenerateUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.model.TCourseOrder;
 import com.ruoyi.system.service.TCourseOrderService;
+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.utils.WxTimeUtils;
@@ -22,6 +24,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
@@ -98,4 +101,54 @@
             wxV3Pay.ack(false, e.getMessage());
         }
     }
+
+
+    /**
+     * 退款回调
+     */
+//    @PostMapping("refund/notify")
+//    @ApiOperation("退款回调")
+//    public void refundNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
+//        try {
+////            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"))
+//        }
+//    }
+    @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 tradeState = params.get("refund_status").toString();
+            // 微信支付订单号
+            String transaction_id = params.get("transaction_id").toString();
+            if (tradeState.equals(RefundEnum.SUCCESS.name())) {
+                TCourseOrder order = courseOrderService.getOne(Wrappers.lambdaQuery(TCourseOrder.class)
+                        .eq(TCourseOrder::getRefundNumber, out_refund_no).last("LIMIT 1"));
+                order.setPayStatus(3);
+                order.setRefundStatus(2);
+                order.setRefundTransactionId(transaction_id);
+                courseOrderService.updateById(order);
+
+                wxV3Pay.ack();
+            }
+        }catch (Exception e){
+            wxV3Pay.ack(false, "不是成功的退款状态");
+        }
+    }
 }

--
Gitblit v1.7.1