From 5ee4dfad6e7b48885e205f8f945276b5d4ca5670 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 18 五月 2023 16:34:27 +0800
Subject: [PATCH] 修改支付

---
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java |  152 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 136 insertions(+), 16 deletions(-)

diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
index 53d9271..5f499ee 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -1,13 +1,20 @@
 package com.supersavedriving.user.modular.api;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.supersavedriving.user.core.common.annotion.ServiceLog;
 import com.supersavedriving.user.core.util.ToolUtil;
 import com.supersavedriving.user.modular.system.model.AppUser;
+import com.supersavedriving.user.modular.system.model.Driver;
 import com.supersavedriving.user.modular.system.model.Order;
-import com.supersavedriving.user.modular.system.service.IAppUserService;
-import com.supersavedriving.user.modular.system.service.IBillService;
-import com.supersavedriving.user.modular.system.service.IOrderService;
+import com.supersavedriving.user.modular.system.model.Revenue;
+import com.supersavedriving.user.modular.system.service.*;
+import com.supersavedriving.user.modular.system.util.MallBook.model.InterfaceResponse;
+import com.supersavedriving.user.modular.system.util.MallBook.model.Receive;
+import com.supersavedriving.user.modular.system.util.MallBook.model.ReceiveUser;
+import com.supersavedriving.user.modular.system.util.MallBook.util.RSASignature;
+import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest;
 import com.supersavedriving.user.modular.system.util.PayMoneyUtil;
 import com.supersavedriving.user.modular.system.util.ResultUtil;
 import com.supersavedriving.user.modular.system.warpper.*;
@@ -23,9 +30,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.PrintWriter;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +53,12 @@
 
     @Autowired
     private IBillService billService;
+
+    @Autowired
+    private IRevenueService revenueService;
+
+    @Autowired
+    private IDriverService driverService;
 
 
 
@@ -230,8 +241,8 @@
 
     @ResponseBody
     @PostMapping("/api/order/queryOrderPrice")
-//    @ServiceLog(name = "获取待支付页面订单费用明细", url = "/api/order/queryOrderPrice")
-    @ApiOperation(value = "获取待支付页面订单费用明细", tags = {"用户端-首页"}, notes = "")
+//    @ServiceLog(name = "获取订单费用明细", url = "/api/order/queryOrderPrice")
+    @ApiOperation(value = "获取订单费用明细", tags = {"用户端-首页"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
@@ -345,19 +356,124 @@
     @PostMapping("/base/order/orderPayCallback")
     public void orderPayCallback(HttpServletRequest request, HttpServletResponse response){
         try {
-            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
-            if(null != map){
-                String out_trade_no = map.get("out_trade_no");
-                String transaction_id = map.get("transaction_id");
-                String result = map.get("result");
-                String orderId = out_trade_no.substring(17);
-                ResultUtil resultUtil = orderService.orderPayCallback(orderId, transaction_id);
+            String code = request.getParameter("code");
+            String version = request.getParameter("version");
+            String msg = request.getParameter("msg");
+            String date = request.getParameter("date");
+            String result = request.getParameter("result");
+            String sign = request.getParameter("sign");
+            InterfaceResponse interfaceResponse = new InterfaceResponse();
+            interfaceResponse.setCode(code);
+            interfaceResponse.setVersion(version);
+            interfaceResponse.setMsg(msg);
+            interfaceResponse.setDate(date);
+            interfaceResponse.setResult(result);
+            interfaceResponse.setSign(sign);
+            // 验签
+            boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign());
+            if (verify) {//验签成功业务处理逻辑
+                JSONObject jsonObject = JSON.parseObject(result);
+                String merOrderId = jsonObject.getString("merOrderId");
+                String orderId = jsonObject.getString("parameter1");
+                ResultUtil resultUtil = orderService.orderPayCallback(orderId, merOrderId);
                 if(resultUtil.getCode() == 10000){
+                    response.setStatus(200);
                     PrintWriter out = response.getWriter();
-                    out.print(result);
+                    out.print("OK");
                     out.flush();
                     out.close();
                 }
+            } else {//验签失败业务处理逻辑
+                System.err.println("支付回调验签失败");
+            }
+
+
+//            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
+//            if(null != map){
+//                String out_trade_no = map.get("out_trade_no");
+//                String transaction_id = map.get("transaction_id");
+//                String result = map.get("result");
+//                String orderId = out_trade_no.substring(17);
+//                ResultUtil resultUtil = orderService.orderPayCallback(orderId, transaction_id);
+//                if(resultUtil.getCode() == 10000){
+//                    PrintWriter out = response.getWriter();
+//                    out.print(result);
+//                    out.flush();
+//                    out.close();
+//                }
+//            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 异步分账回调
+     */
+    @ResponseBody
+    @PostMapping("/base/order/ledgerCallback")
+    public void ledgerCallback(HttpServletRequest request, HttpServletResponse response){
+        try{
+            String code = request.getParameter("code");
+            String version = request.getParameter("version");
+            String msg = request.getParameter("msg");
+            String date = request.getParameter("date");
+            String result = request.getParameter("result");
+            String sign = request.getParameter("sign");
+            InterfaceResponse interfaceResponse = new InterfaceResponse();
+            interfaceResponse.setCode(code);
+            interfaceResponse.setVersion(version);
+            interfaceResponse.setMsg(msg);
+            interfaceResponse.setDate(date);
+            interfaceResponse.setResult(result);
+            interfaceResponse.setSign(sign);
+            // 验签
+            boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign());
+            if (verify) {//验签成功业务处理逻辑
+                JSONObject jsonObject = JSON.parseObject(result);
+                String merOrderId = jsonObject.getString("merOrderId");
+                String orderId = jsonObject.getString("parameter1");
+                //确认收货
+                new Timer().schedule(new TimerTask() {
+                    @Override
+                    public void run() {
+                        Order order = orderService.selectById(orderId);
+                        List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("userType", 2).eq("orderId", order.getId()));
+                        Receive receive = new Receive();//确认收货
+                        receive.setOriginalMerOrderId(merOrderId);
+                        receive.setRcvAmount(String.valueOf(order.getPayMoney() * 100));
+                        List<ReceiveUser> splitList = new ArrayList<>();
+                        for (Revenue revenue : revenues) {
+                            Driver driver = driverService.selectById(revenue.getUserId());
+                            ReceiveUser receiveUser = new ReceiveUser();
+                            receiveUser.setSplitUserId(driver.getMerchantNumber());
+                            receiveUser.setRcvSplitAmount(revenue.getAmount().toString());
+                            splitList.add(receiveUser);
+                        }
+                        receive.setSplitList(splitList);
+                        TrhRequest<Receive> request1 = new TrhRequest();
+                        InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE);
+                        if(!"0000".equals(execute.getResult())){
+                            System.err.println("确认收货" + execute.getMsg());
+                        }
+                        JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                        String status = jsonObject.getString("status");
+                        if("2".equals(status)){
+                            System.err.println("确认收货失败");
+                        }
+                        if("0".equals(status)){
+                            System.err.println("确认收货处理中");
+                        }
+                    }
+                }, 30000);
+                response.setStatus(200);
+                PrintWriter out = response.getWriter();
+                out.print("OK");
+                out.flush();
+                out.close();
+            } else {//验签失败业务处理逻辑
+                System.err.println("支付回调验签失败");
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -495,4 +611,8 @@
             return new ResponseWarpper(500, e.getMessage());
         }
     }
+
+
+
+
 }

--
Gitblit v1.7.1