zhijiezhao 2 年 前
コミット
b592971d9c

+ 23 - 14
src/main/java/com/caimei365/order/service/impl/HeliPayNonOrderServiceImpl.java

@@ -207,12 +207,12 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【购买优惠券异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        couponPayCheck(source, userId, couponId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
+        couponPayCheck(source, userId, couponId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo, null);
         return "SUCCESS";
     }
 
     public void couponPayCheck(Integer source, Integer userId, Integer couponId, Integer recordId, Integer payType,
-                               Double amount, String payFormData, String mbOrderId, String orderRequestNo) {
+                               Double amount, String payFormData, String mbOrderId, String orderRequestNo, Integer infoId) {
         //cm_coupon_club数据库修改
         CouponClubPo couponClubPo = new CouponClubPo();
         couponClubPo.setSource(source);
@@ -241,6 +241,9 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         discernReceipt.setReviewDate(curDateStr);
         discernReceipt.setUpdateDate(curDateStr);
         discernReceipt.setDelFlag(0);
+        if (null != infoId) {
+            discernReceipt.setInfoId(infoId);
+        }
         // 保存 收款记录
         baseMapper.insertDiscernReceipt(discernReceipt);
         log.info("【购买优惠券异步回调】>>>>>>>>>>>>>>保存识别款项(insert[cm_discern_receipt])id:" + discernReceipt.getId() + ",couponRecordId:" + recordId);
@@ -730,12 +733,12 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        superVipStatusCheck(userId, packageId, payType, recordId, amount, payFormData, mbOrderId, orderRequestNo);
+        superVipStatusCheck(userId, packageId, payType, recordId, amount, payFormData, mbOrderId, orderRequestNo, null);
         return "SUCCESS";
     }
 
     public void superVipStatusCheck(Integer userId, Integer packageId, Integer payType, Integer recordId,
-                                    Double amount, String payFormData, String mbOrderId, String orderRequestNo) {
+                                    Double amount, String payFormData, String mbOrderId, String orderRequestNo, Integer infoId) {
         //超级会员数据库修改
         UserVipPo userVip = new UserVipPo();
         UserVipPo dbUserVip = payOrderMapper.getUserVipInfo(userId);
@@ -794,6 +797,9 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         discernReceipt.setReviewDate(curDateStr);
         discernReceipt.setUpdateDate(curDateStr);
         discernReceipt.setDelFlag(0);
+        if (null != infoId) {
+            discernReceipt.setInfoId(infoId);
+        }
         // 保存 收款记录
         baseMapper.insertDiscernReceipt(discernReceipt);
         log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>保存识别款项(insert[cm_discern_receipt])id:" + discernReceipt.getId() + ",vipRecordId:" + recordId);
@@ -1075,7 +1081,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        superVipStatusCheck(userId, vipId, payType, recordId, amount, payFormData, mbOrderId, orderRequestNo);
+        superVipStatusCheck(userId, vipId, payType, recordId, amount, payFormData, mbOrderId, orderRequestNo, null);
         return "SUCCESS";
     }
 
@@ -1330,7 +1336,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【购买优惠券异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        couponPayCheck(source, userId, couponId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
+        couponPayCheck(source, userId, couponId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo, null);
         return "SUCCESS";
     }
 
@@ -1612,12 +1618,12 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【开通认证通会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        authVipStatusCheck(userId, vipId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
+        authVipStatusCheck(userId, vipId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo, null);
         return "SUCCESS";
     }
 
     public void authVipStatusCheck(Integer userId, Integer vipId, Integer recordId, Integer payType, Double amount,
-                                   String payFormData, String mbOrderId, String orderRequestNo) {
+                                   String payFormData, String mbOrderId, String orderRequestNo, Integer infoId) {
         //超级会员数据库修改
         UserVipPo authVip = new UserVipPo();
         UserVipPo dbAuthVip = payOrderMapper.getAuthVipInfo(userId);
@@ -1688,6 +1694,9 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         discernReceipt.setReviewDate(curDateStr);
         discernReceipt.setUpdateDate(curDateStr);
         discernReceipt.setDelFlag(0);
+        if (null != infoId) {
+            discernReceipt.setInfoId(infoId);
+        }
         // 保存 收款记录
         baseMapper.insertDiscernReceipt(discernReceipt);
         log.info("【开通认证通会员异步回调】>>>>>>>>>>>>>>保存识别款项(insert[cm_discern_receipt])id:" + discernReceipt.getId() + ",vipRecordId:" + recordId);
@@ -1754,7 +1763,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【开通认证通会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        authVipStatusCheck(userId, vipId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
+        authVipStatusCheck(userId, vipId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo, null);
         return "SUCCESS";
     }
 
@@ -1861,8 +1870,8 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         Double amount = Double.valueOf(res.getRt8_orderAmount());
         String formData = JSON.toJSONString(res);
         Integer infoId = 0;
-        // 借记卡28,贷记卡29
-        Integer payType = "DEBIT".equals(res.getRt12_onlineCardType()) ? 28 : 29;
+        // 借记卡29,贷记卡30
+        Integer payType = "DEBIT".equals(res.getRt12_onlineCardType()) ? 29 : 30;
         if (vp) {
             /**
              * Integer userId, Integer packageId, Integer payType, Integer recordId,
@@ -1873,7 +1882,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
             Integer userId = Integer.valueOf(s[2]);
             Integer recordId = Integer.valueOf(s[3]);
             infoId = Integer.valueOf(s[4]);
-            superVipStatusCheck(userId, packageId, payType, recordId, amount, formData, mbOrderId, orderRequestNo);
+            superVipStatusCheck(userId, packageId, payType, recordId, amount, formData, mbOrderId, orderRequestNo, infoId);
         } else if (avp) {
             /**
              * Integer userId, Integer vipId, Integer recordId, Integer payType, Double amount,
@@ -1884,7 +1893,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
             Integer userId = Integer.valueOf(s[2]);
             Integer recordId = Integer.valueOf(s[3]);
             infoId = Integer.valueOf(s[4]);
-            authVipStatusCheck(userId, packageId, recordId, payType, amount, formData, mbOrderId, orderRequestNo);
+            authVipStatusCheck(userId, packageId, recordId, payType, amount, formData, mbOrderId, orderRequestNo, infoId);
         } else if (cp) {
             /**
              * Integer source, Integer userId, Integer couponId, Integer recordId, Integer payType,
@@ -1896,7 +1905,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
             Integer recordId = Integer.valueOf(s[3]);
             Integer source = Integer.valueOf(s[4]);
             infoId = Integer.valueOf(s[5]);
-            couponPayCheck(source, userId, couponId, recordId, payType, amount, formData, mbOrderId, orderRequestNo);
+            couponPayCheck(source, userId, couponId, recordId, payType, amount, formData, mbOrderId, orderRequestNo, infoId);
         }
         // quickInfo 信息填充
         String bankCode = res.getRt11_bankId();

+ 31 - 3
src/main/java/com/caimei365/order/service/impl/HeliPayServiceImpl.java

@@ -268,8 +268,8 @@ public class HeliPayServiceImpl implements HeliPayService {
             Integer bankType = "DEBIT".equals(res.getRt12_onlineCardType()) ? 1 : 2;
             payOrderMapper.updateQuickInfo(bankCode, bankType, infoId);
             String userId = res.getRt14_userId().substring(1);
-            // 快捷支付借记卡支付28,快捷支付贷记卡支付29
-            payType = 1 == bankType ? "28" : "29";
+            // 快捷支付借记卡支付29,快捷支付贷记卡支付30
+            payType = 1 == bankType ? "29" : "30";
             payOrderMapper.insertBindId(res.getRt10_bindId(), res.getRt4_customerNumber(), userId, infoId);
         }
         // 订单信息
@@ -1289,6 +1289,9 @@ public class HeliPayServiceImpl implements HeliPayService {
         FirstQuickPayVo firstQuickPayVo = new FirstQuickPayVo();
         log.info("helidto------------" + heliDto);
         heliPayUtil.setQuickValue(heliDto, firstQuickPayVo, headers);
+        if (Double.parseDouble(firstQuickPayVo.getP15_orderAmount()) <= 0.1) {
+            return ResponseJson.error("订单支付金额不能小于最低手续费!");
+        }
         Map reqestMap = null;
         try {
             reqestMap = MessageHandle.getReqestMap(firstQuickPayVo);
@@ -1301,12 +1304,17 @@ public class HeliPayServiceImpl implements HeliPayService {
                 log.info("-----------------请求失败------------------");
                 return ResponseJson.error("请求失败");
             }
+            if (!MessageHandle.isJSON(resultMsg)) {
+                //状态码不对请求失败
+                log.info("-----------------交易失败------------------");
+                return ResponseJson.error("交易失败");
+            }
             QuickPayCreateOrderResponseVo responseVo = JSONObject.parseObject(resultMsg, QuickPayCreateOrderResponseVo.class);
             if (!MessageHandle.checkSign(responseVo)) {
                 log.info("-----------------验签失败------------------");
                 return ResponseJson.error("验签失败");
             }
-            if (!"0000".equals(responseVo.getRt2_retCode())) {
+            if (!"0000".equals(responseVo.getRt2_retCode()) || "FAIL".equals(responseVo.getSmsStatus())) {
                 log.info("交易失败-------------->" + responseVo.getRt3_retMsg());
                 return ResponseJson.error(responseVo.getRt3_retMsg());
             }
@@ -1491,6 +1499,12 @@ public class HeliPayServiceImpl implements HeliPayService {
                 return ResponseJson.error("请求失败");
             }
             String resultMsg = (String) resultMap.get("response");
+            if (MessageHandle.isJSON(resultMsg)) {
+                //失败删除info
+                payOrderMapper.delQuickInfo(infoId);
+                log.info("-------------------验证码校验失败!------------------");
+                return ResponseJson.error("验证码校验失败!");
+            }
             if (1 == flag) {
                 response = JSONObject.parseObject(resultMsg, ConfirmBindCardResponseVo.class);
             } else {
@@ -1537,10 +1551,24 @@ public class HeliPayServiceImpl implements HeliPayService {
                 payOrderMapper.insertBindId(res.getRt10_bindId(), res.getRt4_customerNumber(), res.getRt5_userId().substring(1), Integer.valueOf(infoId));
             } else {
                 QuickPayConfirmPayResponseVo res = (QuickPayConfirmPayResponseVo) response;
+                String[] s = res.getRt5_orderId().split("_");
+                boolean vp = orderId.startsWith("VP");
+                boolean avp = orderId.startsWith("AVP");
+                boolean cp = orderId.startsWith("CP");
+                if (vp || avp) {
+                    infoId = s[4];
+                } else if (cp) {
+                    infoId = s[5];
+                } else {
+                    infoId = s[3];
+                }
                 // 8015短信验证码错误或已过期
                 if ("8015".equals(res.getRt2_retCode())) {
+                    payOrderMapper.delQuickInfo(infoId);
+                    log.info("------------下单支付验证码错误或过期---------------");
                     return ResponseJson.error(-2, res.getRt3_retMsg());
                 } else if (!"0000".equals(res.getRt2_retCode())) {
+                    payOrderMapper.delQuickInfo(infoId);
                     // 下单支付在回调中修改绑卡信息
                     log.info("------------下单支付验证码校验失败---------------");
                     return ResponseJson.error(res.getRt3_retMsg());

+ 2 - 2
src/main/java/com/caimei365/order/service/impl/OrderClubServiceImpl.java

@@ -258,8 +258,8 @@ public class OrderClubServiceImpl implements OrderClubService {
         List<DiscernReceiptVo> discernReceiptList = orderCommonService.getDiscernReceiptAndSetOrder(order);
         if (null != discernReceiptList && discernReceiptList.size() > 0) {
             discernReceiptList.forEach(d -> {
-                if ("28".equals(d.getPayType()) || "29".equals(d.getPayType())) {
-                    //快捷支付借记卡支付28,快捷支付贷记卡支付29
+                if (29 == d.getPayType() || 30 == d.getPayType()) {
+                    //快捷支付借记卡支付29,快捷支付贷记卡支付30
                     Integer infoId = d.getInfoId();
                     QuickInfoVo v = payOrderMapper.findInfoById(infoId);
                     String cardType = "1".equals(v.getBankType()) ? "借记卡" : "信用卡";

+ 2 - 2
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -704,8 +704,8 @@ public class PayOrderServiceImpl implements PayOrderService {
                 if (null != discernReceipt.getPayType()) {
                     discernReceipt.setPayTypeStr(ReceivablesType.getReceivablesType(discernReceipt.getPayType()));
                 }
-                if (28 == discernReceipt.getPayType() || 29 == discernReceipt.getPayType()) {
-                    //快捷支付借记卡支付28,快捷支付贷记卡支付29
+                if (29 == discernReceipt.getPayType() || 30 == discernReceipt.getPayType()) {
+                    //快捷支付借记卡支付29,快捷支付贷记卡支付30
                     Integer infoId = discernReceipt.getInfoId();
                     QuickInfoVo v = payOrderMapper.findInfoById(infoId);
                     String cardType = "1".equals(v.getBankType()) ? "借记卡" : "信用卡";

+ 7 - 3
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -1226,6 +1226,7 @@ public class SubmitServiceImpl implements SubmitService {
                         onlinePay.set(false);
                     } else {
                         double WXCharge = MathUtil.mul(realPay, 0.0065, 2).doubleValue();
+                        double QuickCharge = MathUtil.mul(realPay, 0.006, 2).doubleValue();
                         double AliCharge = MathUtil.mul(realPay, 0.0025, 2).doubleValue();
                         double B2CCharge = MathUtil.mul(realPay, 0.002, 2).doubleValue();
                         //佣金和手续费比较,佣金>手续费则可以走当前支付渠道
@@ -1235,9 +1236,10 @@ public class SubmitServiceImpl implements SubmitService {
                         payWays += bro >= AliCharge ? ",2" : "";
                         payWays += bro >= B2CCharge ? ",3" : "";
                         payWays += bro >= 10 ? ",4" : "";
+                        payWays += bro >= QuickCharge ? ",5" : "";
                         //小于所有的情况下线下补手续费,开放所有渠道
                         if ("".equals(payWays)) {
-                            payWays = "1,2,3,4";
+                            payWays = "1,2,3,4,5";
                         }
                         shopOrderList.get(i).setOnlinePayWays(payWays);
                     }
@@ -1257,6 +1259,7 @@ public class SubmitServiceImpl implements SubmitService {
                         onlinePay.set(false);
                     } else {
                         double WXCharge = MathUtil.mul(realPay, 0.0065, 2).doubleValue();
+                        double QuickCharge = MathUtil.mul(realPay, 0.006, 2).doubleValue();
                         double AliCharge = MathUtil.mul(realPay, 0.0025, 2).doubleValue();
                         double B2CCharge = MathUtil.mul(realPay, 0.002, 2).doubleValue();
                         //佣金和手续费比较,佣金>手续费则可以走当前支付渠道
@@ -1266,9 +1269,10 @@ public class SubmitServiceImpl implements SubmitService {
                         payWays += bro >= AliCharge ? ",2" : "";
                         payWays += bro >= B2CCharge ? ",3" : "";
                         payWays += bro >= 10 ? ",4" : "";
+                        payWays += bro >= QuickCharge ? ",5" : "";
                         //小于所有的情况下线下补手续费,开放所有渠道
                         if ("".equals(payWays)) {
-                            payWays = "1,2,3,4";
+                            payWays = "1,2,3,4,5";
                         }
                         so.setOnlinePayWays(payWays);
                     }
@@ -1630,7 +1634,7 @@ public class SubmitServiceImpl implements SubmitService {
                             return ResponseJson.error(-5, "采购金额过小,将扣除500采美豆,建议您使用微信扫描以下二维码,进入采美旗下“呵呵商城”小程序购买小额商品。");
                         }
                     }
-                    log.info("订单提交状态:"+orderParamBo.getOrderMiniType());
+                    log.info("订单提交状态:" + orderParamBo.getOrderMiniType());
                     UserBeansHistoryPo beansHistory = new UserBeansHistoryPo();
                     beansHistory.setUserId(mainOrder.getUserId());
                     beansHistory.setOrderId(mainOrder.getOrderId());

+ 12 - 1
src/main/java/com/caimei365/order/utils/helipay/MessageHandle.java

@@ -1,6 +1,8 @@
 package com.caimei365.order.utils.helipay;
 
 
+import com.alibaba.fastjson.JSONException;
+import com.alibaba.fastjson.JSONObject;
 import com.caimei365.order.annotation.FieldEncrypt;
 import com.caimei365.order.annotation.SignExclude;
 import org.apache.commons.lang3.StringUtils;
@@ -20,7 +22,16 @@ public class MessageHandle {
 
 	private static final String SPLIT = "&";
 
-	private static final String SIGN = "sign"; 
+	private static final String SIGN = "sign";
+
+	public static boolean isJSON(String test) {
+		try {
+			JSONObject.parseObject(test);
+		} catch (JSONException ex) {
+			return false;
+		}
+		return true;
+	}
 
 	/**
 	 * 获取map

+ 1 - 0
src/main/resources/mapper/OrderCommonMapper.xml

@@ -133,6 +133,7 @@
                cdr.reviewDate,
                cdr.updateDate,
                cdr.delFlag,
+               cdr.quickInfoId as infoId,
                cror.associateAmount
         FROM cm_receipt_order_relation cror
                  LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id