Bladeren bron

斗拱支付

Chris-zy 1 jaar geleden
bovenliggende
commit
3389623136

+ 78 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/callback/PayCallBackController.java

@@ -1,8 +1,12 @@
 package com.qs.mp.web.controller.api.callback;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.google.common.collect.Maps;
+import com.qs.mp.common.constant.Constants;
 import com.qs.mp.common.enums.PayOrderStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.common.utils.WebhookService;
@@ -10,6 +14,9 @@ import com.qs.mp.pay.domain.PayOrder;
 import com.qs.mp.pay.service.IPayOrderService;
 import com.qs.mp.pay.service.IWalletService;
 import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+import java.util.Objects;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.slf4j.Logger;
@@ -17,6 +24,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -105,6 +113,76 @@ public class PayCallBackController {
     }
   }
 
+
+
+  @RequestMapping(value = "dg/orderCallback")
+  @ResponseBody
+  public void orderCallback(HttpServletResponse response, HttpServletRequest request) {
+    response.setHeader("Access-Control-Allow-Origin", "*");
+    Map<String, Object> params = Maps.newHashMap();
+    logger.info("web--orderCallback-->1::");
+
+    logger.info("斗拱 - 微信支付 回调请求参数::{},{}", response, request);
+    String respCode = request.getParameter("resp_code");
+    String respData = request.getParameter("resp_data");
+//        String transStat = request.getParameter("trans_stat");
+    String transAmt0 = org.apache.commons.lang3.StringUtils.isNotEmpty(request.getParameter("trans_amt")) ? request.getParameter("trans_amt") : "0";
+    logger.info("orderCallback::respCode::{},respData::{},transAmt::{}", respCode, respData,transAmt0);
+//        double transAmt = Double.parseDouble(transAmt0);
+
+    logger.info("dougong callback params decoding---->{}", respData);
+    JSONObject respDataInfoJson = JSONObject.parseObject(respData);
+    String huifuPayId = respDataInfoJson.getString("req_seq_id");
+    String huifuId = respDataInfoJson.getString("huifu_id");
+    String sysId = respDataInfoJson.getString("sys_id");
+    String transStat = respDataInfoJson.getString("trans_stat");
+    logger.info("dougong--callback--pasing--huifuPayId::{},huifuId::{},sysId::{},transStat::{}", huifuPayId,huifuId,sysId,transStat);
+    String tradesId = huifuPayId.contains("D") ? huifuPayId.split("D")[0] : huifuPayId;
+    params.put("tradesId", tradesId);
+    if (Objects.isNull(params.get("tradesId"))) {
+      logger.info("tradesId不能为空");
+    }
+
+    if (org.apache.commons.lang3.StringUtils.isNotEmpty(respCode)) {
+      if (!Constants.DOUGONG_ORDER_SUCCESS_CODE.equals(respCode) && (!Constants.DOUGONG_PAY_SUCCESS_CODE.equals(respCode))) {
+        logger.info("斗拱回调状态:{},失败,订单号:{}", respCode, params.get("tradesId").toString());
+        logger.info("斗拱回调状态:[" + respCode + "],失败");
+        return;
+      }
+
+      if(Constants.DOUGONG_PAY_SUCCESS_CODE.equals(respCode) && Constants.DOUGONG_PAY_TRANS_S.equals(transStat)){
+        logger.info("orderCallback--->{}", params.get("tradesId").toString());
+
+        try {
+          logger.info("orderCallback----------------->1");
+
+          PayOrder payOrder = payOrderService.getById(tradesId);
+          payOrder.setOrderNo(huifuPayId);
+          payOrder.setCompleteDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,new Date()));
+          payOrder.setChannelNo(huifuPayId);
+          payOrder.setOrderStatus("1");
+          boolean ret = payOrderService.saveOrUpdate(payOrder);
+          if (!ret) {
+            throw new ServiceException("支付订单更新失败,orderId:");
+          }
+
+        } catch (Exception e) {
+          logger.error("斗拱线下扫码订单回调失败:{}", e.getMessage());
+          e.printStackTrace();
+          logger.error("斗拱线下扫码订单回调失败:" + e.getMessage());
+          return;
+        }
+      }
+    }
+
+    logger.info("斗拱线下扫码订单回调失败.订单:" + huifuPayId);
+
+  }
+
+
+
+
+
   private void responseWrite(HttpServletResponse response,String echostr){
     try {
       response.getWriter().write(echostr);

+ 8 - 0
mp-common/src/main/java/com/qs/mp/common/constant/Constants.java

@@ -213,4 +213,12 @@ public class Constants
      * 斗拱下单成功
      */
     public static final String DOUGONG_ORDER_SUCCESS_CODE = "00000100";
+
+    /**
+     * 斗拱交易成功
+     */
+    public static final String DOUGONG_PAY_SUCCESS_CODE = "00000000";
+
+    public static final String DOUGONG_PAY_TRANS_S = "S";
+
 }