From 1fb4b332196a1986a5ff6dee9619e6b937f87f01 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 27 八月 2025 11:52:23 +0800
Subject: [PATCH] PC跳转小程序支付

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/WXCallBackController.java |  156 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 116 insertions(+), 40 deletions(-)

diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/WXCallBackController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/WXCallBackController.java
index 5b6e1fd..30dafc9 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/WXCallBackController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/WXCallBackController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.other.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.security.service.TokenService;
@@ -20,21 +21,25 @@
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.net.URLDecoder;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
  * <p>
- *  微信回调
+ * 微信回调
  * </p>
  *
  * @author 无关风月
@@ -59,22 +64,50 @@
     private WechatPayService wechatPayService;
     @Resource
     private TServicePayService servicePayService;
+
     @ResponseBody
     @PostMapping("/integralCallback")
-    public void integralCallback(HttpServletRequest request, HttpServletResponse response){
+    public R integralCallback(HttpServletRequest request) throws IOException {
         System.err.println("积分充值回调");
-        PayResult payResult= null;
-        try {
-            payResult = wechatPayService.processNotify(request);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
+        Map<String, String> params = new HashMap<String, String>();
+        System.err.println("请求"+request);
+        BufferedReader reader = request.getReader();
+        String string1 = reader.toString();
+        System.err.println("请求reader"+string1);
+        StringBuilder requestBody = new StringBuilder();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            requestBody.append(line);
         }
-        IntegralPay integralPay = integralPayService.lambdaQuery().eq(IntegralPay::getCode, payResult.getOrderNumber()).one();
-        if (integralPay != null && integralPay.getPayStatus() == 1){
+        System.err.println("全部请求体"+requestBody);
+        // URL解码
+        String decodedBody = URLDecoder.decode(requestBody.toString(), "UTF-8");
+        System.err.println("解码后请求体: " + decodedBody);
+        String[] paramsArray = decodedBody.split("&");
+        String respDataJson = "";
+        for (String param : paramsArray) {
+            if (param.startsWith("resp_data=")) {
+                respDataJson = param.substring(10); // 去掉"resp_data="前缀
+                break;
+            }
+        }
+        System.err.println("处理后的"+respDataJson);
+        // 转换为JSONObject
+        JSONObject resp_data = JSONObject.parseObject(respDataJson);
+        System.err.println(resp_data);
+        String string = resp_data.getString("trans_stat");
+        if (!string.equals("S")){
+            System.err.println("陈工");
+        }
+        String req_seq_id = resp_data.getString("req_seq_id");
+        String hf_seq_id = resp_data.getString("hf_seq_id");
+        IntegralPay integralPay = integralPayService.lambdaQuery().eq(IntegralPay::getCode, req_seq_id).one();
+        if (integralPay != null && integralPay.getPayStatus() == 1) {
+
             SysUser data = sysUserClient.getSysUser(integralPay.getUserId()).getData();
             integralPay.setPayStatus(2);
             integralPay.setPayTime(LocalDateTime.now());
-            integralPay.setOrderNumber(payResult.getTransactionId());
+            integralPay.setOrderNumber(hf_seq_id);
             integralPayService.updateById(integralPay);
             IntegralRecord integralRecord = new IntegralRecord();
             integralRecord.setPayId(integralPay.getId());
@@ -84,43 +117,87 @@
             integralRecord.setIntegralCount(integralPay.getIntegralCount());
             integralRecord.setDelFlag(0);
             integralRecord.setCreateTime(LocalDateTime.now());
-            integralRecordService.save(integralRecord);
-            data.setIntegral(data.getIntegral()+integralPay.getIntegralCount());
-            sysUserClient.updateSysUser(data);
-        }
-            response.setStatus(200);
-            PrintWriter out = null;
-            try {
-                out = response.getWriter();
-            } catch (IOException e) {
-                throw new RuntimeException(e);
+            if (integralPay.getIntegralCount()>0){
+                integralRecordService.save(integralRecord);
             }
-            out.println("success");
-            out.flush();
-            out.close();
+            data.setIntegral(data.getIntegral()!=null?data.getIntegral() + integralPay.getIntegralCount():integralPay.getIntegralCount());
+            sysUserClient.updateSysUser(data);
+            return R.ok(null, "success");
+        }
+        return R.ok(null, "error");
+    }
+
+    public static void main(String[] args) {
+        String s = "resp_desc=交易成功[000]&resp_code=00000000&sign=PymKvUt5iBSn1EmBHu41ESxygYl80rHVRZVFlmipqg5zYSF/Yeq30ZJm0l5ztvIaGvUQChYQ5DAVkN/N+TYg1WU+FhMi/RTP15OpBAj8gGtYPyk7Z4lF9FLwiSGmX0RvCYWI5+LVsk10i7+j9332kAuB5GpKm0tOaDGULHZYlfrt5D5BgJ8RKdjYJ4OOV1Ex5J5PNLPYE5uc8rdzTQ9HHTu4N+sBOBV+tXJFYtSOoAaiDsRmv5Er8X8ogSlNODmaj7zBbZQHrPTTs8rtBl+YbQo28cmgykwdl9pPTMtAjkL9dX6/JVApquKgm9M+v8+CDT0MKjn/nyVE4J2EWc/7LQ==&" +
+                "resp_data={\"acct_date\":\"20250816\",\"acct_id\":\"F10004674\",\"acct_split_bunch\":{\"acct_infos\":[{\"acct_date\":\"20250816\",\"acct_id\":\"F10004674\",\"div_amt\":\"0.01\",\"huifu_id\":\"6666000174575407\"}],\"fee_acct_date\":\"20250816\",\"fee_acct_id\":\"F10004674\",\"fee_amt\":\"0.00\",\"fee_huifu_id\":\"6666000174575407\"},\"acct_stat\":\"S\",\"atu_sub_mer_id\":\"797542530\",\"avoid_sms_flag\":\"\",\"bagent_id\":\"6666000167477678\",\"bank_desc\":\"支付成功\",\"bank_message\":\"支付成功\",\"bank_order_no\":\"4200002762202508169050647775\"" +
+                ",\"bank_seq_id\":\"273346\",\"bank_type\":\"OTHERS\",\"base_acct_id\":\"F10004674\"," +
+                "\"batch_id\":\"250816\",\"channel_type\":\"N\",\"charge_flags\":\"758_0\",\"debit_type\"" +
+                ":\"0\",\"delay_acct_flag\":\"N\",\"div_flag\":\"0\",\"end_time\":\"20250816153144\"," +
+                "\"fee_amount\":\"0.00\",\"fee_amt\":\"0.00\",\"fee_flag\":2,\"fee_formula_infos\"" +
+                ":[{\"fee_formula\":\"MAX(0.00,AMT*0.005)\",\"fee_type\":\"TRANS_FEE\"}],\"fee_rec_type" +
+                "\":\"1\",\"fee_type\":\"INNER\",\"gate_id\":\"IB\",\"hf_seq_id\":\"002900TOP1B250816153133P665ac139cd300000\"" +
+                ",\"huifu_id\":\"6666000174575407\",\"is_delay_acct\":\"0\",\"is_div\":\"0\",\"maze_resp_code\":\"\",\"mer_nam" +
+                "e\":\"贵州中嘉瑞祺新能源科技有限公司\",\"mer_ord_id\":\"2025081615313312273346\",\"mypaytsf_discount\":\"0.00\",\"" +
+                "need_big_object\":false,\"notify_type\":2,\"org_auth_no\":\"\",\"org_huifu_seq_id\":\"\",\"org_t" +
+                "rans_date\":\"\",\"out_ord_id\":\"4200002762202508169050647775\",\"out_trans_id\":\"42" +
+                "00002762202508169050647775\",\"party_order_id\":\"032425081655893847103301\",\"pay" +
+                "_amt\":\"0.01\",\"pay_scene\":\"02\",\"posp_seq_id\":\"032425081655893847103301\"" +
+                ",\"product_id\":\"KAZX\",\"ref_no\":\"153133273346\",\"req_date\":\"202508" +
+                "16\",\"req_seq_id\":\"2025081615313312273346\",\"resp_code\":\"00000000" +
+                "\",\"resp_desc\":\"交易成功\",\"risk_check_data\":{},\"risk_check_info\":{" +
+                "},\"settlement_amt\":\"0.01\",\"sub_resp_code\":\"00000000\",\"sub_resp_desc\"" +
+                ":\"交易成功\",\"subsidy_stat\":\"I\",\"sys_id\":\"6666000174575407\",\"" +
+                "trade_type\":\"T_MINIAPP\",\"trans_amt\":\"0.01\",\"trans_date\":\"2025081" +
+                "6\",\"trans_fee_allowance_info\":{\"actual_fee_amt\":\"0.00\",\"allowance_fee_" +
+                "amt\":\"0.00\",\"allowance_type\":\"0\",\"receivable_fee_amt\":\"0.00\"},\"trans_s" +
+                "tat\":\"S\",\"trans_time\":\"153133\",\"trans_type\":\"T_MINIAPP\",\"ts_encash_detail\":[" +
+                "],\"wx_response\":{\"bank_type\":\"OTHERS\",\"coupon_fee\":\"0.00\",\"openid\":\"o8jhot3gj5UeqqT" +
+                "-od35bM6rJOYk\",\"sub_appid\":\"wx049faf9c5234f31c\",\"sub_openid\":\"oJiKr7Rm5v3qGzOSy5WQp8_qrvic\"}}";
+
+        // 解析参数
+        String[] paramsArray = s.split("&");
+        String respDataJson = "";
+        for (String param : paramsArray) {
+            if (param.startsWith("resp_data=")) {
+                respDataJson = param.substring(10); // 去掉"resp_data="前缀
+                break;
+            }
+        }
+
+        // 转换为JSONObject
+        JSONObject resp_data = JSONObject.parseObject(respDataJson);
+        System.err.println(resp_data);
+        String string = resp_data.getString("trans_stat");
+        if (!string.equals("S")){
+            System.err.println("陈工");
+        }
+        String req_seq_id = resp_data.getString("req_seq_id");
+        String hf_seq_id = resp_data.getString("hf_seq_id");
+        System.err.println(req_seq_id);
+        System.err.println(hf_seq_id);
     }
     @ResponseBody
     @PostMapping("/serviceCallback")
-    public void serviceCallback(HttpServletRequest request, HttpServletResponse response){
+    public void serviceCallback(HttpServletRequest request, HttpServletResponse response) {
         System.err.println("服务费缴纳回调");
-        PayResult payResult= null;
+        PayResult payResult = null;
         try {
             payResult = wechatPayService.processNotify(request);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
         ServicePay servicePay = servicePayService.lambdaQuery().eq(ServicePay::getCode, payResult.getOrderNumber()).one();
-        if (servicePay != null && servicePay.getPayStatus() == 1){
+        if (servicePay != null && servicePay.getPayStatus() == 1) {
             servicePay.setPayStatus(2);
             ServicePay servicePayBefore = servicePayService.lambdaQuery()
                     .eq(ServicePay::getUserId, servicePay.getUserId())
-                    .eq(ServicePay::getPayStatus,2)
+                    .eq(ServicePay::getPayStatus, 2)
                     .orderByDesc(ServicePay::getCreateTime)
                     .last("limit 1")
                     .one();
-            if (servicePayBefore!=null){
+            if (servicePayBefore != null) {
                 servicePay.setEndTime(servicePayBefore.getEndTime().plusDays(365));
-            }else{
+            } else {
                 servicePay.setEndTime(LocalDateTime.now().plusDays(365));
 
             }
@@ -130,18 +207,17 @@
             servicePay.setOrderNumber(payResult.getTransactionId());
             servicePayService.updateById(servicePay);
         }
-            response.setStatus(200);
-            PrintWriter out = null;
-            try {
-                out = response.getWriter();
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-            out.println("success");
-            out.flush();
-            out.close();
+        response.setStatus(200);
+        PrintWriter out = null;
+        try {
+            out = response.getWriter();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        out.println("success");
+        out.flush();
+        out.close();
     }
-
 
 
 }

--
Gitblit v1.7.1