From fb44b3960db1fa86b16be649636e571f5fda014f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 11 May 2023 11:31:59 +0800
Subject: [PATCH] 会员等级设置

---
 src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java |  147 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 121 insertions(+), 26 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
index 36489c4..5e3c641 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
@@ -9,6 +9,7 @@
 import cc.mrbird.febs.mall.service.ICommonService;
 import cc.mrbird.febs.pay.model.LaKaLaBasicReqDate;
 import cc.mrbird.febs.pay.model.LaKaLaCreateOrderReqDate;
+import cc.mrbird.febs.pay.model.LaKaLaQueryOrderReqDate;
 import cc.mrbird.febs.pay.service.LaKaLaService;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.date.DateUtil;
@@ -117,6 +118,10 @@
     public final static String apiUrlCreate = "https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/create";
 
     public final static String apiUrlCreate_prd = "https://s2.lakala.com/api/v3/ccss/counter/order/create";
+
+    public final static String apiUrlQuery = "https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/query";
+
+    public final static String apiUrlQuery_prd = "https://s2.lakala.com/api/v3/ccss/counter/order/query";
     /**
      * 支付回调地址
      */
@@ -174,6 +179,7 @@
         try {
             String body = JSONUtil.parseObj(laKaLaBasicReqDate).toString();
 
+            log.info("LKL创建请求Body,{}",body);
             String authorization = getAuthorization(body);
 
             String apiUrlCreateHttp = "";
@@ -196,6 +202,7 @@
             String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING);
             System.out.println("responseStr  " + responseStr);
 
+            log.info("LKL创建请求返回的responseStr,{}",responseStr);
             String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n";
 
             System.out.println("source  " + source);
@@ -239,6 +246,7 @@
 
     @Override
     public String payCallback(JSONObject jsonObject) {
+        boolean flag = false;
         String orderStatus = jsonObject.get("order_status").toString();
         if(2 != Integer.parseInt(orderStatus)){
             return "FAIL";
@@ -246,37 +254,124 @@
 
         String orderNo = jsonObject.get("out_order_no").toString();
 
-        LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
-        query.eq(MallOrderInfo::getOrderNo, orderNo);
-        MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query);
-        if ("1".equals(orderInfo.getPayResult())) {
-            return "SUCCESS";
+        /*
+            {"req_time":"1660205634885","version":"3.0","req_data":{"out_order_no":"GHSNVDY8033038232443530","merchant_no":"8222900701107M5"}}
+         */
+
+        LaKaLaQueryOrderReqDate laKaLaQueryOrderReqDate = new LaKaLaQueryOrderReqDate();
+        laKaLaQueryOrderReqDate.setOut_order_no(orderNo);
+        if ("dev".equals(active) || "test".equals(active)) {
+            laKaLaQueryOrderReqDate.setMerchant_no(merchant_no);
+        }else{
+            laKaLaQueryOrderReqDate.setMerchant_no(merchant_no_prd);
         }
 
-        orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
-        orderInfo.setPayResult("1");
-        orderInfo.setPayTime(new Date());
-        String payOrderNo = jsonObject.get("pay_order_no").toString();
-        orderInfo.setPayTradeNo(payOrderNo);
-        orderInfoMapper.updateById(orderInfo);
+        String yyyyMMddHHmmss = DateUtil.format(new Date(), "yyyyMMddHHmmss");
+        LaKaLaBasicReqDate laKaLaBasicReqDate = new LaKaLaBasicReqDate();
+        laKaLaBasicReqDate.setReq_time(yyyyMMddHHmmss);
+        laKaLaBasicReqDate.setVersion("3.0");
+        JSONObject jsonObjectQuery = JSONUtil.parseObj(laKaLaQueryOrderReqDate);
+        laKaLaBasicReqDate.setReq_data(jsonObjectQuery);
+        try {
+            String body = JSONUtil.parseObj(laKaLaBasicReqDate).toString();
+            log.info("LKL查询请求Body,{}",body);
+            String authorization = getAuthorization(body);
 
-        commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue());
+            String apiUrlCreateHttp = "";
+            if ("dev".equals(active) || "test".equals(active)) {
+                apiUrlCreateHttp = apiUrlQuery;
+            }else{
+                apiUrlCreateHttp = apiUrlQuery_prd;
+            }
+            HttpResponse response = post(apiUrlCreateHttp , body, authorization);
+            if (response.getStatusLine().getStatusCode() != 200) {
+                return "FAIL";
+            }
 
-        /**
-         * 插入一条待处理记录
-         * mq处理之后,更新状态
-         */
-        MallMqRecord mallMqRecord = new MallMqRecord();
-        mallMqRecord.setOrderId(orderInfo.getId());
-        mallMqRecord.setState(2);
-        mallMqRecord.setRetryTimes(2);
-        mallMqRecordMapper.insert(mallMqRecord);
-        //发送补贴消息
-        agentProducer.sendPerkMoneyMsg(orderInfo.getId());
-        //发送代理自动升级消息
-        agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId());
+            String appid = getHeadValue(response, "Lklapi-Appid");
+            String lklapiSerial = getHeadValue(response, "Lklapi-Serial");
+            String timestamp = getHeadValue(response, "Lklapi-Timestamp");
+            String nonce = getHeadValue(response, "Lklapi-Nonce");
+            String signature = getHeadValue(response, "Lklapi-Signature");
+            String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING);
+            System.out.println("responseStr  " + responseStr);
 
-        return "SUCCESS";
+            log.info("LKL查询返回的responseStr,{}",responseStr);
+
+            String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n";
+
+            System.out.println("source  " + source);
+            String lklCertificatePathNameStr = "";
+            if ("dev".equals(active) || "test".equals(active)) {
+                lklCertificatePathNameStr = lklCertificatePathName;
+            }else{
+                lklCertificatePathNameStr = lklCertificatePathName_prd;
+            }
+            InputStream fileInputStream = resourceLoader.getResource(lklCertificatePathNameStr).getInputStream();
+            X509Certificate lklCertificate = loadCertificate(fileInputStream);
+            boolean verify = verify(lklCertificate, source.getBytes(ENCODING), signature);
+
+            if (verify) {
+                System.out.println("验签成功");
+                JSONObject parseObj = JSONUtil.parseObj(responseStr);
+                String code = parseObj.get("code").toString();
+                if("000000".equals(code)){
+                    Object respData = parseObj.get("resp_data");
+                    JSONObject respDataChild = JSONUtil.parseObj(respData);
+                    String orderStatusQuery = respDataChild.get("order_status").toString();
+                    if(2 != Integer.parseInt(orderStatusQuery)){
+                        return "FAIL";
+                    }
+
+                    Object trade_info_list = respDataChild.get("order_trade_info_list");
+                    JSONObject respChild = JSONUtil.parseObj(trade_info_list);
+                    String tradeStatus = respChild.get("trade_status").toString();
+                    if(!"S".equals(tradeStatus)){
+                        return "FAIL";
+                    }
+                    flag = true;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if(flag){
+            LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
+            query.eq(MallOrderInfo::getOrderNo, orderNo);
+            MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query);
+            if ("1".equals(orderInfo.getPayResult())) {
+                return "SUCCESS";
+            }
+
+            orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+            orderInfo.setPayResult("1");
+            orderInfo.setPayTime(new Date());
+            String payOrderNo = jsonObject.get("pay_order_no").toString();
+            orderInfo.setPayTradeNo(payOrderNo);
+            orderInfoMapper.updateById(orderInfo);
+
+            commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue());
+
+            /**
+             * 插入一条待处理记录
+             * mq处理之后,更新状态
+             */
+            MallMqRecord mallMqRecord = new MallMqRecord();
+            mallMqRecord.setOrderId(orderInfo.getId());
+            mallMqRecord.setState(2);
+            mallMqRecord.setRetryTimes(2);
+            mallMqRecordMapper.insert(mallMqRecord);
+            //发送补贴消息
+            agentProducer.sendPerkMoneyMsg(orderInfo.getId());
+            //发送代理自动升级消息
+            agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId());
+
+            return "SUCCESS";
+        }else{
+            return "FAIL";
+        }
+
     }
 
     public static void main(String[] args) {

--
Gitblit v1.9.1