zhijiezhao 2 lat temu
rodzic
commit
03b3e9ddd4

+ 77 - 45
src/main/java/com/caimei365/order/components/HeliPayUtil.java

@@ -51,6 +51,8 @@ public class HeliPayUtil {
     private String couponUnionPay;
     @Value("${pay.quick-url}")
     private String quickPayUrl;
+    @Value("${pay.quick-un-url}")
+    private String quickUnOrderUrl;
 
     private final String publicCode = "wx91c4152b60ca91a3";
 
@@ -325,63 +327,93 @@ public class HeliPayUtil {
 
     public void setQuickValue(HeliDto heliDto, FirstQuickPayVo firstQuickPayVo, HttpHeaders headers) {
         firstQuickPayVo.setP1_bizType(BizType.getP1ByType(heliDto.getPayType()));
-        firstQuickPayVo.setP2_customerNumber(payOrderMapper.getSplitCodeByShopOrderId(heliDto.getShopOrderId()));
-        if (1 == heliDto.getQuickPayType()) {
-            //已绑卡
-            QuickPayUserVo quickPayUserInfo = payOrderMapper.getQuickPayUserInfo(heliDto.getUserId());
-            firstQuickPayVo.setP3_userId(quickPayUserInfo.getQuickPayUserId());
-            //姓名
-            firstQuickPayVo.setP6_payerName(quickPayUserInfo.getBankUserName());
-            //身份证号
-            firstQuickPayVo.setP8_idCardNo(quickPayUserInfo.getIdCard());
-            //银行卡号
-            firstQuickPayVo.setP9_cardNo(quickPayUserInfo.getBankNumber());
-            //银行绑定手机号
-            firstQuickPayVo.setP13_phone(quickPayUserInfo.getBindMobile());
-            if (2 == quickPayUserInfo.getBankType()) {
-                String[] split = quickPayUserInfo.getBankExpireTime().split("-");
-                firstQuickPayVo.setP10_year(split[0]);
-                firstQuickPayVo.setP11_month(split[1]);
-                firstQuickPayVo.setP12_cvv2(quickPayUserInfo.getBankCvvCode());
-            }
-        } else {
-            //未绑卡
-            firstQuickPayVo.setP3_userId("U" + heliDto.getUserId());
-            //姓名
-            firstQuickPayVo.setP6_payerName(heliDto.getQuickPayName());
-            //身份证号
-            firstQuickPayVo.setP8_idCardNo(heliDto.getIdCard());
-            //银行卡号
-            firstQuickPayVo.setP9_cardNo(heliDto.getQuickPayBankCode());
-            //银行绑定手机号
-            firstQuickPayVo.setP13_phone(heliDto.getQuickPayMobile());
-            //信用卡有效期年,月,cvv2 选择信用卡时必填,否则不填
-            if (2 == heliDto.getBankType()) {
-                String[] split = heliDto.getQuickPayBankExpireTime().split("-");
-                firstQuickPayVo.setP10_year(split[0]);
-                firstQuickPayVo.setP11_month(split[1]);
-                firstQuickPayVo.setP12_cvv2(heliDto.getCvvCode());
-            }
+//        if (1 == heliDto.getQuickPayType()) {
+        //已绑卡
+        QuickPayUserVo quickPayUserInfo = payOrderMapper.getQuickPayUserInfo(heliDto.getUserId());
+        firstQuickPayVo.setP3_userId(quickPayUserInfo.getQuickPayUserId());
+        //姓名
+        firstQuickPayVo.setP6_payerName(quickPayUserInfo.getBankUserName());
+        //身份证号
+        firstQuickPayVo.setP8_idCardNo(quickPayUserInfo.getIdCard());
+        //银行卡号
+        firstQuickPayVo.setP9_cardNo(quickPayUserInfo.getBankNumber());
+        //银行绑定手机号
+        firstQuickPayVo.setP13_phone(quickPayUserInfo.getBindMobile());
+        if (2 == quickPayUserInfo.getBankType()) {
+            String[] split = quickPayUserInfo.getBankExpireTime().split("-");
+            firstQuickPayVo.setP10_year(split[0]);
+            firstQuickPayVo.setP11_month(split[1]);
+            firstQuickPayVo.setP12_cvv2(quickPayUserInfo.getBankCvvCode());
         }
+//        } else {
+//            //未绑卡
+//            firstQuickPayVo.setP3_userId("U" + heliDto.getUserId());
+//            //姓名
+//            firstQuickPayVo.setP6_payerName(heliDto.getQuickPayName());
+//            //身份证号
+//            firstQuickPayVo.setP8_idCardNo(heliDto.getIdCard());
+//            //银行卡号
+//            firstQuickPayVo.setP9_cardNo(heliDto.getQuickPayBankCode());
+//            //银行绑定手机号
+//            firstQuickPayVo.setP13_phone(heliDto.getQuickPayMobile());
+//            //信用卡有效期年,月,cvv2 选择信用卡时必填,否则不填
+//            if (2 == heliDto.getBankType()) {
+//                String[] split = heliDto.getQuickPayBankExpireTime().split("-");
+//                firstQuickPayVo.setP10_year(split[0]);
+//                firstQuickPayVo.setP11_month(split[1]);
+//                firstQuickPayVo.setP12_cvv2(heliDto.getCvvCode());
+//            }
+//        }
+
         /**
-         *  订单id待定  快捷支付中回调参数不能带备注,无法在备注区传参,在快捷支付中订单id承担额外参数作用
+         *  快捷支付中回调参数不能带备注,无法在备注区传参,在快捷支付中订单id承担额外参数作用
          *  (见其他支付方式desc参数)
+         *
+         *  QuickPayFlag快捷支付类型标记1订单2超级会员3认证通会员4优惠券
          */
-        //todo
-        firstQuickPayVo.setP4_orderId("");
+        String orderId = "";
         String time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+        //非订单统一回调地址  order/pay/unorder/quick/callback
+        firstQuickPayVo.setP23_serverCallbackUrl(quickUnOrderUrl);
+        //非订单都是走信息
+        firstQuickPayVo.setP2_customerNumber(Constant.CUSTOMERNUM);
+        if (1 == heliDto.getQuickPayFlag()) {
+            //普通订单
+            OrderVo order = orderCommonMapper.getOrderByShopOrderId(heliDto.getShopOrderId());
+            orderId = order.getOrderNo() + "_" + order.getOrderId() + "_" + heliDto.getShopOrderId();
+            //普通订单取传参
+            firstQuickPayVo.setP15_orderAmount(heliDto.getPayAmount());
+            //回调地址
+            firstQuickPayVo.setP23_serverCallbackUrl(quickPayUrl);
+            firstQuickPayVo.setP2_customerNumber(payOrderMapper.getSplitCodeByShopOrderId(heliDto.getShopOrderId()));
+        } else if (2 == heliDto.getQuickPayFlag()) {
+            //超级会员
+            VipRecordBo record = payOrderMapper.getVipPackageRecord(heliDto.getVipRecordId());
+            Double price = payOrderMapper.getVipPackagePriceById(record.getPackageId());
+            firstQuickPayVo.setP15_orderAmount(price.toString());
+            orderId = "VP_" + record.getPackageId() + "_" + record.getUserId() + "_" + heliDto.getVipRecordId() + "_" + time;
+        } else if (3 == heliDto.getQuickPayFlag()) {
+            //认证通会员
+            VipRecordBo record = payOrderMapper.getAuthVipRecord(heliDto.getVipRecordId());
+            Double price = payOrderMapper.getAuthVipPackagePrice(record.getPackageId());
+            firstQuickPayVo.setP15_orderAmount(price.toString());
+            orderId = "AVP_" + record.getPackageId() + "_" + record.getUserId() + "_" + heliDto.getVipRecordId() + "_" + time;
+        } else if (4 == heliDto.getQuickPayFlag()) {
+            Double couponPrice = payOrderMapper.getCouponPrice(heliDto.getCouponRecordId());
+            orderId = "CP_" + heliDto.getCouponId() + "_" + heliDto.getUserId() + "_" + heliDto.getCouponRecordId() + "_" + heliDto.getSource() + "_" + time;
+            firstQuickPayVo.setP15_orderAmount(couponPrice.toString());
+        }
+        firstQuickPayVo.setP4_orderId(orderId);
         firstQuickPayVo.setP5_timestamp(time);
         firstQuickPayVo.setP7_idCardType("IDCARD");
         firstQuickPayVo.setP14_currency("CNY");
-        //目前设置0.1元起
-        firstQuickPayVo.setP15_orderAmount(heliDto.getPayAmount());
         //名称
         firstQuickPayVo.setP16_goodsName("采美订单");
         firstQuickPayVo.setP18_terminalType("IMEI");
         //终端唯一标识,如手机序列号
-        firstQuickPayVo.setP19_terminalId(UUID.randomUUID() + heliDto.getUserId().toString());
-        //回调地址
-        firstQuickPayVo.setP23_serverCallbackUrl(quickPayUrl);
+        firstQuickPayVo.setP19_terminalId(UUID.randomUUID().toString());
+        //同步下发短信
+        firstQuickPayVo.setSendValidateCode("true");
         firstQuickPayVo.setP20_orderIp(headers.getFirst("X-CLIENT-IP"));
     }
 }

+ 1 - 1
src/main/java/com/caimei365/order/controller/HeliPayApi.java

@@ -303,7 +303,7 @@ public class HeliPayApi {
 
     @ApiOperation("快捷支付异步通知回调")
     @PostMapping("/quick/callback")
-    public String quickPayCallback(QuickPayConfirmPayResponseVo res) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
+    public String quickPayCallback(QuickPayConfirmPayResponseVo res){
         if (res == null) {
             return "回调参数失败";
         }

+ 11 - 3
src/main/java/com/caimei365/order/controller/HeliPayNonOrderApi.java

@@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.HeliDto;
 import com.caimei365.order.model.dto.PayCouponDto;
-import com.caimei365.order.model.dto.PayVipDto;
 import com.caimei365.order.model.vo.NotifyResponseVo;
+import com.caimei365.order.model.vo.QuickPayConfirmPayResponseVo;
 import com.caimei365.order.model.vo.UnionResVo;
 import com.caimei365.order.service.HeliPayNonOrderService;
 import io.swagger.annotations.Api;
@@ -80,6 +80,15 @@ public class HeliPayNonOrderApi {
         return payNonOrderService.paySecondByAlipay(heliDto, headers);
     }
 
+    @ApiOperation("快捷支付非订单回调")
+    @PostMapping("/unorder/quick/callback")
+    public String quickPayCallback(QuickPayConfirmPayResponseVo res) {
+        if (null == res) {
+            return "回调参数失败";
+        }
+        return payNonOrderService.quickCallback(res);
+    }
+
     /**
      * 二手发布-支付回调
      */
@@ -239,7 +248,6 @@ public class HeliPayNonOrderApi {
     }
 
 
-
     /**
      * 二手发布-网银支付回调
      */
@@ -377,7 +385,7 @@ public class HeliPayNonOrderApi {
 
     @ApiOperation("开通认证通会员-网银线上支付")
     @PostMapping("/auth/vip/union")
-    public ResponseJson<String> payAuthVipByUnionPay(HeliDto heliDto, @RequestHeader HttpHeaders headers){
+    public ResponseJson<String> payAuthVipByUnionPay(HeliDto heliDto, @RequestHeader HttpHeaders headers) {
         if (StringUtils.isEmpty(heliDto.getPayType())) {
             return ResponseJson.error("支付类型不能为空", null);
         }

+ 4 - 7
src/main/java/com/caimei365/order/model/dto/HeliDto.java

@@ -85,17 +85,11 @@ public class HeliDto implements Serializable {
     @ApiModelProperty("购买记录id")
     private Integer couponRecordId;
     /**
-     *  1小程序 2网站
+     * 1小程序 2网站
      */
     @ApiModelProperty("领取渠道1小程序 2网站")
     private Integer source;
 
-    /**
-     *  快捷支付方式 1已绑卡 2未绑卡
-     */
-    @ApiModelProperty("快捷支付方式 1已绑卡 2未绑卡")
-    private Integer quickPayType;
-
     @ApiModelProperty("快捷支付方式 1借记卡 2信用卡")
     private Integer bankType;
 
@@ -116,5 +110,8 @@ public class HeliDto implements Serializable {
 
     @ApiModelProperty("信用卡安全码")
     private String cvvCode;
+
+    @ApiModelProperty("快捷支付类型标记1订单2超级会员3认证通会员4优惠券")
+    private Integer quickPayFlag;
 }
 

+ 3 - 0
src/main/java/com/caimei365/order/model/vo/FirstQuickPayVo.java

@@ -70,6 +70,9 @@ public class FirstQuickPayVo {
 
     private String P23_serverCallbackUrl;
 
+    @SignExclude
+    private String sendValidateCode;
+
     @SignExclude
     private String signatureType;
 }

+ 1 - 1
src/main/java/com/caimei365/order/model/vo/QuickPayConfirmPayResponseVo.java

@@ -4,7 +4,7 @@ package com.caimei365.order.model.vo;
 import com.caimei365.order.annotation.SignExclude;
 
 /**
- * Created by heli50 on 2017/4/14.
+ * 首次支付预下单回调
  */
 public class QuickPayConfirmPayResponseVo {
     private String rt1_bizType;

+ 27 - 16
src/main/java/com/caimei365/order/service/HeliPayNonOrderService.java

@@ -7,6 +7,7 @@ import com.caimei365.order.model.dto.PayCouponDto;
 import com.caimei365.order.model.dto.PaySecondDto;
 import com.caimei365.order.model.dto.PayVipDto;
 import com.caimei365.order.model.vo.NotifyResponseVo;
+import com.caimei365.order.model.vo.QuickPayConfirmPayResponseVo;
 import com.caimei365.order.model.vo.UnionResVo;
 import org.springframework.http.HttpHeaders;
 
@@ -21,22 +22,26 @@ public interface HeliPayNonOrderService {
     ResponseJson<JSONObject> payCouponByWeChat(HeliDto heliDto, HttpHeaders headers) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
 
     String couponCallback(NotifyResponseVo res) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
+
     /**
      * 二手发布微信线上支付
+     *
      * @param heliDto {
-     *               productId      二手发布商品id
-     *               returnUrl     页面回调地址
-     *               code          微信小程序code
-     *               state         微信公众号state参数
-     * }
+     *                productId      二手发布商品id
+     *                returnUrl     页面回调地址
+     *                code          微信小程序code
+     *                state         微信公众号state参数
+     *                }
      */
     ResponseJson<JSONObject> paySecondByWeChat(HeliDto heliDto, HttpHeaders headers) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
+
     /**
      * 二手发布支付宝线上支付
+     *
      * @param heliDto {
-     *               productId      二手发布商品id
-     *               returnUrl     页面回调地址
-     * }
+     *                productId      二手发布商品id
+     *                returnUrl     页面回调地址
+     *                }
      */
     ResponseJson<JSONObject> paySecondByAlipay(HeliDto heliDto, HttpHeaders headers) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
 
@@ -47,20 +52,23 @@ public interface HeliPayNonOrderService {
 
     /**
      * 升级超级会员-微信线上支付
+     *
      * @param heliDto {
-     *               vipRecordId   会员购买记录Id
-     *               returnUrl     页面回调地址
-     *               code          微信小程序code
-     *               state         微信公众号state参数
-     * }
+     *                vipRecordId   会员购买记录Id
+     *                returnUrl     页面回调地址
+     *                code          微信小程序code
+     *                state         微信公众号state参数
+     *                }
      */
     ResponseJson<JSONObject> paySuperVipByWeChat(HeliDto heliDto, HttpHeaders headers) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
+
     /**
      * 升级超级会员-支付宝线上支付
+     *
      * @param heliDto {
-     *               vipRecordId   会员购买记录Id
-     *               returnUrl     页面回调地址
-     * }
+     *                vipRecordId   会员购买记录Id
+     *                returnUrl     页面回调地址
+     *                }
      */
     ResponseJson<JSONObject> paySuperVipByAlipay(HeliDto heliDto, HttpHeaders headers) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
 
@@ -77,6 +85,7 @@ public interface HeliPayNonOrderService {
      * 升级超级会员-网银支付回调
      */
     String unionVipCallback(UnionResVo data) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
+
     /**
      * 二手发布-网银支付回调
      */
@@ -123,4 +132,6 @@ public interface HeliPayNonOrderService {
     ResponseJson vipCheck(Integer recordId);
 
     ResponseJson<JSONObject> payCouponByBeans(HeliDto heliDto, HttpHeaders headers);
+
+    String quickCallback(QuickPayConfirmPayResponseVo res);
 }

+ 105 - 229
src/main/java/com/caimei365/order/service/impl/HeliPayNonOrderServiceImpl.java

@@ -25,6 +25,7 @@ import com.caimei365.order.utils.MathUtil;
 import com.caimei365.order.utils.PayUtil;
 import com.caimei365.order.utils.helipay.Disguiser;
 import com.caimei365.order.utils.helipay.HttpClientService;
+import com.caimei365.order.utils.helipay.MessageHandle;
 import com.caimei365.order.utils.helipay.MyBeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -206,6 +207,12 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【购买优惠券异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
+        couponPayCheck(source, userId, couponId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
+        return "SUCCESS";
+    }
+
+    public void couponPayCheck(Integer source, Integer userId, Integer couponId, Integer recordId, Integer payType,
+                               Double amount, String payFormData, String mbOrderId, String orderRequestNo) {
         //cm_coupon_club数据库修改
         CouponClubPo couponClubPo = new CouponClubPo();
         couponClubPo.setSource(source);
@@ -252,7 +259,6 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         log.info("【购买优惠券异步回调】>>>>>>>>>>>收款项和购买历史关系(insert[cm_receipt_order_relation])id:" + relation.getId() + ",couponRecordId:" + recordId);
         //修改分账付款状态
         payOrderMapper.updateSplitAccountByPay(mbOrderId);
-        return "SUCCESS";
     }
 
     /**
@@ -679,7 +685,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
      * @param res
      */
     @Override
-    public String paymentSuperVipCallback(NotifyResponseVo res) throws NoSuchAlgorithmException, InvalidKeySpecException, IntrospectionException, InvocationTargetException, IllegalAccessException {
+    public String paymentSuperVipCallback(NotifyResponseVo res) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
         log.info("******************** 升级超级会员异步回调 start *******************");
         String sign = res.getSign();
         log.info("回调签名" + sign);
@@ -708,13 +714,13 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         // 附加数据,支付时若有传输则原样返回(vipId,userId,recordId,payType),下单时为空,则不返回该数据
         String attach = res.getRt8_desc();
         String[] split = attach.split(",");
-        int vipId = 0;
+        int packageId = 0;
         int userId = 0;
         int recordId = 0;
         int payType = 0;
         try {
             // 会员套餐Id
-            vipId = Integer.parseInt(split[0]);
+            packageId = Integer.parseInt(split[0]);
             // 用户Id
             userId = Integer.parseInt(split[1]);
             // 购买历史记录Id
@@ -724,6 +730,12 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
+        superVipStatusCheck(userId, packageId, payType, recordId, amount, payFormData, mbOrderId, orderRequestNo);
+        return "SUCCESS";
+    }
+
+    public void superVipStatusCheck(Integer userId, Integer packageId, Integer payType, Integer recordId,
+                                    Double amount, String payFormData, String mbOrderId, String orderRequestNo) {
         //超级会员数据库修改
         UserVipPo userVip = new UserVipPo();
         UserVipPo dbUserVip = payOrderMapper.getUserVipInfo(userId);
@@ -739,7 +751,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         Calendar cal = Calendar.getInstance();
         cal.setTime(beginTime);
         // 超级会员套餐时长(月)
-        Integer mouth = payOrderMapper.getVipPackageDurationById(vipId);
+        Integer mouth = payOrderMapper.getVipPackageDurationById(packageId);
         cal.add(Calendar.MONTH, mouth);
         userVip.setEndTime(cal.getTime());
         userVip.setDelFlag(0);
@@ -877,12 +889,11 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         if (smsPushFlag && StringUtils.isNotBlank(bindMobile)) {
             String shortLink = remoteCallService.getShortLink(8, 2, "https://www.caimei365.com/user/member.html?userId=" + userId);
             String content = "恭喜您成功开通采美平台超级会员,为期" + mouth + "个月,快戳采美网站链接www.caimei365.com/t/" + shortLink + "或微信搜索“采美采购商城”小程序登录采美平台畅享会员特权吧。关注公众号“采美365网”可获取更多优惠和精彩资讯。退订回T";
-            boolean sendSms = remoteCallService.getSendSms(3,2, bindMobile, content);
+            boolean sendSms = remoteCallService.getSendSms(3, 2, bindMobile, content);
             if (!sendSms) {
                 log.info("购买会员短信推送失败");
             }
         }
-        return "SUCCESS";
     }
 
     @Override
@@ -1064,93 +1075,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        //超级会员数据库修改
-        UserVipPo userVip = new UserVipPo();
-        UserVipPo dbUserVip = payOrderMapper.getUserVipInfo(userId);
-        Date beginTime = new Date();
-        if (null != dbUserVip && null != dbUserVip.getEndTime()) {
-            // 有效期内续费
-            beginTime = dbUserVip.getEndTime();
-            userVip.setId(dbUserVip.getId());
-        }
-        userVip.setUserId(userId);
-        userVip.setUpdateTime(new Date());
-        userVip.setBeginTime(beginTime);
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(beginTime);
-        // 超级会员套餐时长(月)
-        Integer mouth = payOrderMapper.getVipPackageDurationById(vipId);
-        cal.add(Calendar.MONTH, mouth);
-        userVip.setEndTime(cal.getTime());
-        userVip.setDelFlag(0);
-        if (null != userVip.getId()) {
-            // 更新会员信息
-            payOrderMapper.updateUserVipInfo(userVip);
-        } else {
-            // 新增会员信息
-            payOrderMapper.insertUserVipInfo(userVip);
-        }
-        // 修改会员历史记录支付状态
-        VipRecordBo record = payOrderMapper.getVipPackageRecord(recordId);
-        record.setPayStatus(1);
-        record.setBeginTime(beginTime);
-        record.setEndTime(cal.getTime());
-        record.setPayWay(1);
-        record.setPayType(payType);
-        record.setPayTime(new Date());
-        payOrderMapper.updateVipPackageRecord(record);
-        // 修改支付链接状态
-        OrderPayLinkVo orderPayLink = payOrderMapper.getVipPayLink(recordId, amount);
-        if (null != orderPayLink && (12 == payType || 17 == payType)) {
-            orderPayLink.setPayStatus(1);
-            payOrderMapper.updateOrderPayLinkStatus(orderPayLink);
-        }
-        Date date = new Date();
-        String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
-        // 保存收款记录
-        DiscernReceiptPo discernReceipt = new DiscernReceiptPo();
-        discernReceipt.setPayWay(1);
-        discernReceipt.setPayType(record.getPayType());
-        discernReceipt.setReceiptType(6);
-        discernReceipt.setReceiptStatus(3);
-        discernReceipt.setReceiptAmount(amount);
-        discernReceipt.setConfirmType(4);
-        discernReceipt.setRePayFlag(1);
-        discernReceipt.setFormData(payFormData);
-        discernReceipt.setReceiptDate(curDateStr);
-        discernReceipt.setConfirmDate(curDateStr);
-        discernReceipt.setReviewDate(curDateStr);
-        discernReceipt.setUpdateDate(curDateStr);
-        discernReceipt.setDelFlag(0);
-        // 保存 收款记录
-        baseMapper.insertDiscernReceipt(discernReceipt);
-        log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>保存识别款项(insert[cm_discern_receipt])id:" + discernReceipt.getId() + ",vipRecordId:" + recordId);
-        // 收款项和订单关系表
-        OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
-        relation.setReceiptId(discernReceipt.getId());
-        relation.setVipRecordId(recordId);
-        relation.setAssociateAmount(amount);
-        relation.setMbOrderId(mbOrderId);
-        relation.setOrderRequestNo(orderRequestNo);
-        relation.setSplitStatus(1);
-        relation.setRelationType(3);
-        relation.setDelFlag(0);
-        // 保存 收款项和订单关系
-        baseMapper.insertOrderReceiptRelation(relation);
-        log.info("【升级超级会员异步回调】>>>>>>>>>>>收款项和购买历史关系(insert[cm_receipt_order_relation])id:" + relation.getId() + ",vipRecordId:" + recordId);
-        //已支付推送
-        boolean smsPushFlag = !orderRequestNo.contains("BETA") && !orderRequestNo.contains("DEV");
-        String bindMobile = baseMapper.getBindMobileByUserId(userId);
-        if (smsPushFlag && StringUtils.isNotBlank(bindMobile)) {
-            String shortLink = remoteCallService.getShortLink(8, 2, "https://www.caimei365.com/user/member.html?userId=" + userId);
-            String content = "恭喜您成功开通采美平台超级会员,为期" + mouth + "个月,快戳采美网站链接www.caimei365.com/t/" + shortLink + "或微信搜索“采美采购商城”小程序登录采美平台畅享会员特权吧。关注公众号“采美365网”可获取更多优惠和精彩资讯。退订回T";
-            boolean sendSms = remoteCallService.getSendSms(3,2, bindMobile, content);
-            if (!sendSms) {
-                log.info("购买会员短信推送失败");
-            }
-        }
-        //修改分账付款状态
-        payOrderMapper.updateSplitAccount(mbOrderId, orderRequestNo);
+        superVipStatusCheck(userId, vipId, payType, recordId, amount, payFormData, mbOrderId, orderRequestNo);
         return "SUCCESS";
     }
 
@@ -1405,52 +1330,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【购买优惠券异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        //cm_coupon_club数据库修改
-        CouponClubPo couponClubPo = new CouponClubPo();
-        couponClubPo.setSource(source);
-        couponClubPo.setUserId(userId);
-        couponClubPo.setCouponId(couponId);
-        couponClubPo.setStatus("1");
-        couponClubPo.setDelFlag("0");
-        couponClubPo.setCreateDate(new Date());
-        orderClubMapper.insertCouponClub(couponClubPo);
-        // 改历史记录支付状态
-        payOrderMapper.updateCouponRecord(recordId);
-        Date date = new Date();
-        String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
-        // 保存收款记录
-        DiscernReceiptPo discernReceipt = new DiscernReceiptPo();
-        discernReceipt.setPayWay(1);
-        discernReceipt.setPayType(payType);
-        discernReceipt.setReceiptType(8);
-        discernReceipt.setReceiptStatus(3);
-        discernReceipt.setReceiptAmount(amount);
-        discernReceipt.setConfirmType(4);
-        discernReceipt.setRePayFlag(1);
-        discernReceipt.setFormData(payFormData);
-        discernReceipt.setReceiptDate(curDateStr);
-        discernReceipt.setConfirmDate(curDateStr);
-        discernReceipt.setReviewDate(curDateStr);
-        discernReceipt.setUpdateDate(curDateStr);
-        discernReceipt.setDelFlag(0);
-        // 保存 收款记录
-        baseMapper.insertDiscernReceipt(discernReceipt);
-        log.info("【购买优惠券异步回调】>>>>>>>>>>>>>>保存识别款项(insert[cm_discern_receipt])id:" + discernReceipt.getId() + ",couponRecordId:" + recordId);
-        // 收款项和订单关系表
-        OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
-        relation.setReceiptId(discernReceipt.getId());
-        relation.setCouponRecordId(recordId);
-        relation.setAssociateAmount(amount);
-        relation.setMbOrderId(mbOrderId);
-        relation.setOrderRequestNo(orderRequestNo);
-        relation.setSplitStatus(1);
-        relation.setRelationType(6);
-        relation.setDelFlag(0);
-        // 保存 收款项和订单关系
-        baseMapper.insertOrderReceiptRelation(relation);
-        log.info("【购买优惠券异步回调】>>>>>>>>>>>收款项和购买历史关系(insert[cm_receipt_order_relation])id:" + relation.getId() + ",couponRecordId:" + recordId);
-        //修改分账付款状态
-        payOrderMapper.updateSplitAccount(mbOrderId, orderRequestNo);
+        couponPayCheck(source, userId, couponId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
         return "SUCCESS";
     }
 
@@ -1732,6 +1612,12 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【开通认证通会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
+        authVipStatusCheck(userId, vipId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
+        return "SUCCESS";
+    }
+
+    public void authVipStatusCheck(Integer userId, Integer vipId, Integer recordId, Integer payType, Double amount,
+                                   String payFormData, String mbOrderId, String orderRequestNo) {
         //超级会员数据库修改
         UserVipPo authVip = new UserVipPo();
         UserVipPo dbAuthVip = payOrderMapper.getAuthVipInfo(userId);
@@ -1820,7 +1706,6 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         log.info("【开通认证通会员异步回调】>>>>>>>>>>>收款项和购买历史关系(insert[cm_receipt_order_relation])id:" + relation.getId() + ",vipRecordId:" + recordId);
         //修改分账付款状态
         payOrderMapper.updateSplitAccountByPay(mbOrderId);
-        return "SUCCESS";
     }
 
     @Override
@@ -1869,94 +1754,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         } catch (NumberFormatException e) {
             log.info("【开通认证通会员异步回调】>>>>>>>>>>>>>>获取回调参数解析失败!");
         }
-        //超级会员数据库修改
-        UserVipPo authVip = new UserVipPo();
-        UserVipPo dbAuthVip = payOrderMapper.getAuthVipInfo(userId);
-        Date beginTime = new Date();
-        if (null != dbAuthVip) {
-            authVip.setId(dbAuthVip.getId());
-            if (dbAuthVip.getEndTime().compareTo(beginTime) > 0) {
-                // 有效期内续费,用原结束时间作为开始时间来计算结束时间
-                beginTime = dbAuthVip.getEndTime();
-            }
-        }
-        authVip.setUserId(userId);
-        authVip.setBeginTime(beginTime);
-        authVip.setUpdateTime(new Date());
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(beginTime);
-        // 查询认证通会员套餐信息
-        AuthVipPackagePo packagePo = payOrderMapper.getAuthVipPackageById(vipId);
-        cal.add(1 == packagePo.getUnit() ? Calendar.MONTH : Calendar.YEAR, packagePo.getDuration());
-        authVip.setEndTime(cal.getTime());
-        authVip.setDelFlag(0);
-        if (null != authVip.getId()) {
-            // 更新会员信息
-            payOrderMapper.updateAuthVipInfo(authVip);
-            if (authVip.getBeginTime().compareTo(beginTime) >= 0) {
-                // 删除原有角色关联
-                payOrderMapper.deleteAuthVipRoleRelation(userId);
-                // 会员过期重新分配角色
-                saveRoleRelation(userId, "1");
-            }
-        } else {
-            // 新增会员信息
-            payOrderMapper.insertAuthVipInfo(authVip);
-            // 删除原有角色关联
-            payOrderMapper.deleteAuthVipRoleRelation(userId);
-            // 分配角色
-            saveRoleRelation(userId, "1");
-        }
-        // 修改会员历史记录支付状态
-        VipRecordBo record = payOrderMapper.getAuthVipRecord(recordId);
-        record.setPayStatus(1);
-        record.setBeginTime(beginTime);
-        record.setEndTime(cal.getTime());
-        record.setPayWay(1);
-        record.setPayType(payType);
-        record.setPayTime(new Date());
-        payOrderMapper.updateAuthVipRecord(record);
-        // 修改支付链接状态
-        OrderPayLinkVo orderPayLink = payOrderMapper.getAuthVipPayLink(recordId, amount);
-        if (null != orderPayLink && (12 == payType || 17 == payType)) {
-            orderPayLink.setPayStatus(1);
-            payOrderMapper.updateOrderPayLinkStatus(orderPayLink);
-        }
-        Date date = new Date();
-        String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
-        // 保存收款记录
-        DiscernReceiptPo discernReceipt = new DiscernReceiptPo();
-        discernReceipt.setPayWay(1);
-        discernReceipt.setPayType(record.getPayType());
-        discernReceipt.setReceiptType(9);
-        discernReceipt.setReceiptStatus(3);
-        discernReceipt.setReceiptAmount(amount);
-        discernReceipt.setConfirmType(4);
-        discernReceipt.setRePayFlag(1);
-        discernReceipt.setFormData(payFormData);
-        discernReceipt.setReceiptDate(curDateStr);
-        discernReceipt.setConfirmDate(curDateStr);
-        discernReceipt.setReviewDate(curDateStr);
-        discernReceipt.setUpdateDate(curDateStr);
-        discernReceipt.setDelFlag(0);
-        // 保存 收款记录
-        baseMapper.insertDiscernReceipt(discernReceipt);
-        log.info("【开通认证通会员异步回调】>>>>>>>>>>>>>>保存识别款项(insert[cm_discern_receipt])id:" + discernReceipt.getId() + ",vipRecordId:" + recordId);
-        // 收款项和订单关系表
-        OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
-        relation.setReceiptId(discernReceipt.getId());
-        relation.setAuthVipRecordId(recordId);
-        relation.setAssociateAmount(amount);
-        relation.setMbOrderId(mbOrderId);
-        relation.setOrderRequestNo(orderRequestNo);
-        relation.setSplitStatus(1);
-        relation.setRelationType(3);
-        relation.setDelFlag(0);
-        // 保存 收款项和订单关系
-        baseMapper.insertOrderReceiptRelation(relation);
-        log.info("【开通认证通会员异步回调】>>>>>>>>>>>收款项和购买历史关系(insert[cm_receipt_order_relation])id:" + relation.getId() + ",vipRecordId:" + recordId);
-        //修改分账付款状态
-        payOrderMapper.updateSplitAccountByPay(mbOrderId);
+        authVipStatusCheck(userId, vipId, recordId, payType, amount, payFormData, mbOrderId, orderRequestNo);
         return "SUCCESS";
     }
 
@@ -2020,6 +1818,84 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         return ResponseJson.success("抵扣成功!", null);
     }
 
+    @Override
+    public String quickCallback(QuickPayConfirmPayResponseVo res) {
+        try {
+            if (MessageHandle.checkSign(res)) {
+                if ("SUCCESS".equals(res.getRt9_orderStatus())) {
+                    log.info("快捷支付付款成功============================> res:" + res);
+                    /**
+                     * 验签通过 查看交易状态码是否成功,是则继续业务逻辑
+                     * 保存身份证,银行卡,姓名,银行编码, 合利宝绑定ip 若已经存在,则不保存
+                     */
+                    checkUnOrderStatus(res);
+                    return "SUCCESS";
+                } else {
+                    log.info("快捷支付付款状态异常============================> res:" + res);
+                }
+            } else {
+                log.info("快捷支付回调验签失败=========================> res:" + res);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private void checkUnOrderStatus(QuickPayConfirmPayResponseVo res) {
+        /**
+         *  超级会员
+         *  orderId = "VP" + "_" +record.getPackageId() + "_" + record.getUserId() + "_" + heliDto.getVipRecordId() + "_" + time;
+         *  认证通会员
+         *  orderId ="AVP" + "_" + record.getPackageId() + "_" + record.getUserId() + "_" + heliDto.getVipRecordId() + "_" + time;
+         *  优惠券
+         *  orderId ="CP" + "_" + heliDto.getCouponId() + "_" + heliDto.getUserId() + "_" + heliDto.getCouponRecordId() + "_" + heliDto.getSource() + "_" + time;
+         */
+        String orderId = res.getRt5_orderId();
+        boolean vp = orderId.startsWith("VP");
+        boolean avp = orderId.startsWith("AVP");
+        boolean cp = orderId.startsWith("CP");
+        String mbOrderId = res.getRt5_orderId();
+        String orderRequestNo = res.getRt6_serialNumber();
+        Double amount = Double.valueOf(res.getRt8_orderAmount());
+        String formData = JSON.toJSONString(res);
+        if (vp) {
+            /**
+             * Integer userId, Integer packageId, Integer payType, Integer recordId,
+             * Double amount, String payFormData, String mbOrderId, String orderRequestNo
+             */
+            String[] s = orderId.split("_");
+            Integer packageId = Integer.valueOf(s[1]);
+            Integer userId = Integer.valueOf(s[2]);
+            Integer recordId = Integer.valueOf(s[3]);
+            superVipStatusCheck(userId, packageId, 28, recordId, amount, formData, mbOrderId, orderRequestNo);
+        } else if (avp) {
+            /**
+             * Integer userId, Integer vipId, Integer recordId, Integer payType, Double amount,
+             * String payFormData, String mbOrderId, String orderRequestNo
+             */
+            String[] s = orderId.split("_");
+            Integer packageId = Integer.valueOf(s[1]);
+            Integer userId = Integer.valueOf(s[2]);
+            Integer recordId = Integer.valueOf(s[3]);
+            authVipStatusCheck(userId, packageId, recordId, 28, amount, formData, mbOrderId, orderRequestNo);
+        } else if (cp) {
+            /**
+             * Integer source, Integer userId, Integer couponId, Integer recordId, Integer payType,
+             * Double amount, String payFormData, String mbOrderId, String orderRequestNo
+             */
+            String[] s = orderId.split("_");
+            Integer userId = Integer.valueOf(s[2]);
+            Integer couponId = Integer.valueOf(s[1]);
+            Integer recordId = Integer.valueOf(s[3]);
+            Integer source = Integer.valueOf(s[4]);
+            couponPayCheck(source, userId, couponId, recordId, 28, amount, formData, mbOrderId, orderRequestNo);
+        }
+
+
+
+    }
+
     public void saveRoleRelation(Integer userId, String roleIds) {
         if (StringUtils.isNotEmpty(roleIds)) {
             // 设置用户角色

+ 63 - 25
src/main/java/com/caimei365/order/service/impl/HeliPayServiceImpl.java

@@ -210,23 +210,57 @@ public class HeliPayServiceImpl implements HeliPayService {
         }
         // 订单状态 INIT:已接收 DOING:处理中 SUCCESS:成功 FAIL:失败 CLOSE:关闭 CANCEL:撤销
         String orderStatus = res.getRt4_status();
-        // 平台唯一流水号
-        String mbOrderId = res.getRt3_systemSerial();
-        // 商户唯一订单号
-        String orderRequestNo = res.getRt2_orderId();
-        // 本次支付金额,以元为单位
-        Double amount = Double.valueOf(res.getRt5_orderAmount());
         log.info("【支付异步回调】>>>>>>>>>>>>>>支付订单状态:" + orderStatus);
         if (!"SUCCESS".equals(orderStatus)) {
             return "支付失败";
         }
-        String[] split = res.getRt8_desc().split(",");
-        //0位置订单id
-        Integer orderId = Integer.valueOf(split[0]);
-        //1位置支付类型
-        String payType = split[1];
-        //2位置子订单id
-        Integer shopOrderId = Integer.valueOf(split[2]);
+        String s = checkOrderStatus(res, 1);
+        if ("SUCCESS".equals(s)) {
+            return "SUCCESS";
+        }
+        return null;
+    }
+
+    /**
+     * 1 其他支付,2快捷支付
+     *
+     * @param o
+     * @param status
+     * @return
+     */
+    public String checkOrderStatus(Object o, Integer status) {
+        // 平台唯一流水号
+        String mbOrderId = "";
+        String orderRequestNo = "";
+        Double amount = null;
+        Integer orderId = null;
+        String payType = "";
+        Integer shopOrderId = null;
+        if (1 == status) {
+            NotifyResponseVo res = (NotifyResponseVo) o;
+            mbOrderId = res.getRt3_systemSerial();
+            // 商户唯一订单号
+            orderRequestNo = res.getRt2_orderId();
+            // 本次支付金额,以元为单位
+            amount = Double.valueOf(res.getRt5_orderAmount());
+            String[] split = res.getRt8_desc().split(",");
+            //0位置订单id
+            orderId = Integer.valueOf(split[0]);
+            //1位置支付类型
+            payType = split[1];
+            //2位置子订单id
+            shopOrderId = Integer.valueOf(split[2]);
+        } else {
+            QuickPayConfirmPayResponseVo res = (QuickPayConfirmPayResponseVo) o;
+            payType = "28";
+            orderRequestNo = res.getRt5_orderId();
+            mbOrderId = res.getRt6_serialNumber();
+            amount = Double.valueOf(res.getRt8_orderAmount());
+            String[] s = orderRequestNo.split("_");
+            //  orderId = order.getOrderNo() + "_" + order.getOrderId() + "_" + heliDto.getShopOrderId();
+            orderId = Integer.valueOf(s[1]);
+            shopOrderId = Integer.valueOf(s[2]);
+        }
         // 订单信息
         OrderVo order = orderCommonMapper.getOrderByOrderId(orderId);
         ShopOrderVo shopOrder = orderCommonMapper.getShopOrderByOrderId(shopOrderId);
@@ -288,7 +322,6 @@ public class HeliPayServiceImpl implements HeliPayService {
         // 更新订单支付状态
         payOrderMapper.updateOrderStatus(order);
         // 支付记录
-        //todo sql的or条件子订单返佣????
         List<DiscernReceiptVo> shopOrderDiscernReceiptList = orderCommonMapper.getShopOrderDiscernReceipt(shopOrderId);
         double shopOrderReceiptAmount = 0d;
         if (null != shopOrderDiscernReceiptList && shopOrderDiscernReceiptList.size() > 0) {
@@ -313,7 +346,7 @@ public class HeliPayServiceImpl implements HeliPayService {
         discernReceipt.setReceiptAmount(amount);
         discernReceipt.setConfirmType(4);
         discernReceipt.setRePayFlag(1);
-        discernReceipt.setFormData(JSONObject.toJSONString(res));
+        discernReceipt.setFormData(JSONObject.toJSONString(o));
         discernReceipt.setReceiptDate(curDateStr);
         discernReceipt.setConfirmDate(curDateStr);
         discernReceipt.setReviewDate(curDateStr);
@@ -1243,25 +1276,24 @@ public class HeliPayServiceImpl implements HeliPayService {
         Map reqestMap = null;
         try {
             reqestMap = MessageHandle.getReqestMap(firstQuickPayVo);
-            log.info("请求参数:" + reqestMap);
+            log.info("首次支付下单请求参数:" + reqestMap);
             Map<String, Object> resultMap = HttpClientService.getHttpResp(reqestMap, Constant.REQUEST_URL_QUICKPAY);
-            log.info("响应结果:" + resultMap);
+            log.info("首次支付下单响应结果:" + resultMap);
             String resultMsg = (String) resultMap.get("response");
             if ((Integer) resultMap.get("statusCode") != org.apache.commons.httpclient.HttpStatus.SC_OK) {
                 //状态码不对请求失败
+                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())) {
-                log.info(responseVo.getRt3_retMsg());
+                log.info("交易失败-------------->" + responseVo.getRt3_retMsg());
                 return ResponseJson.error(responseVo.getRt3_retMsg());
             }
-            //验签没问题执行业务逻辑,保存身份证,银行卡,姓名,若已经存在,则不保存
-
-            //业务逻辑执行完请求发送短信
             return ResponseJson.success();
         } catch (Exception e) {
             e.printStackTrace();
@@ -1274,14 +1306,20 @@ public class HeliPayServiceImpl implements HeliPayService {
         try {
             if (MessageHandle.checkSign(res)) {
                 if ("SUCCESS".equals(res.getRt9_orderStatus())) {
+                    log.info("快捷支付付款成功============================> res:" + res);
                     /**
                      * 验签通过 查看交易状态码是否成功,是则继续业务逻辑
-                     * rt10_bindId需要存入 cm_quickpay_info
+                     * 保存身份证,银行卡,姓名,银行编码, 合利宝绑定ip 若已经存在,则不保存
                      */
-
-
-                    return "SUCCESS";
+                    String s = checkOrderStatus(res, 2);
+                    if ("SUCCESS".equals(s)) {
+                        return "SUCCESS";
+                    }
+                } else {
+                    log.info("快捷支付付款状态异常============================> res:" + res);
                 }
+            } else {
+                log.info("快捷支付回调验签失败=========================> res:" + res);
             }
         } catch (Exception e) {
             e.printStackTrace();