From 3d4b8043d8157972a9aed7dbb6bb771eb70fcadd Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Tue, 3 Sep 2019 11:03:25 +0800 Subject: [PATCH] =?UTF-8?q?[POS][=E4=BF=AE=E6=94=B9]:=E5=88=B8=E6=A0=B8?= =?UTF-8?q?=E9=94=80=E5=8F=8A=E5=88=B8=E6=A0=B8=E9=94=80=E6=92=A4=E9=94=80?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/controller/PosController.java | 43 ++++-- .../java/com/iformall/service/PosService.java | 19 +-- .../iformall/service/impl/PosServiceImpl.java | 145 ++++++++++++------ .../com/iformall/pos/test/PosAppTest.java | 35 +++-- .../java/com/iformall/pay/WxPayConstant.java | 8 + 5 files changed, 157 insertions(+), 93 deletions(-) diff --git a/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java b/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java index d8481533d..bddcdf050 100644 --- a/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java +++ b/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java @@ -1,7 +1,6 @@ package com.iformall.controller; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ErrorCode; @@ -119,7 +118,6 @@ public class PosController extends BaseController { } } - /* @ApiOperation(value = "优惠核销接口", notes = "{" + "\"dev_id\":\"string(必填)\"," + "\"nonce_str\":\"string(必填)\"," + @@ -138,6 +136,7 @@ public class PosController extends BaseController { @SystemControllerLog(description = "优惠核销接口") public Map couponOrderVerify(@RequestBody Map params) { JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); // 1. check sign Map retMap = checkSign(params, payContent); @@ -149,16 +148,16 @@ public class PosController extends BaseController { logger.info(WxPayConstant.RES_KEY + ": " + resKey); try { - retMap = posService.couponOrderVerify(params); + retObj = posService.couponOrderVerify(params); } catch (MallinkException e) { - return buildReturnMap(retMap, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); } catch (Exception e) { - return buildReturnMap(retMap, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); } - doActionAfterVerify(params, retMap); - return buildReturnMap(retMap, resKey, WxPayConstant.RET_SUCCESS, "",null); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); } + /* private void doActionAfterVerify(Map params, Map retMap) { String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID @@ -178,19 +177,33 @@ public class PosController extends BaseController { couponOrderService.sendInsideCouponVerifyMsg(tenantId, couponOrderId, buUserId); } } + */ @ApiOperation(value = "券核销取消", notes = "{" + "\"dev_id\":\"string(必填)\"," + "\"nonce_str\":\"string(必填)\"," + "\"tenant_id\":\"string(必填)\"," + "\"merchant_id\":\"string(必填)\"," + - "\"bu_user_id\":\"string(必填)\"," + - "\"coupon_order_id\":\"string(必填)\"" + - "\"pos_order_id\":\"string(必填)\"}") + "\"order_operator_id\":\"string(必填)\"," + + "\"mem_id\":\"string(选填)\"," + + "\"mem_phone_number\":\"string(选填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"order_number_of_platform\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(必填)\"," + + "\"order_amount_left\":\"string单位(分)(必填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"payment_info\":{" + + "\"coupon_id\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(必填)\"," + + "\"amount_left\":\"string单位(分)(必填)\"," + + "\"promotion_amount\":\"string单位(分)(必填)\"," + + "\"amount_left_after_pay\":\"string单位(分)(必填)\"" + + "}}") @PostMapping("/couponOrderVerifyCancel") @SystemControllerLog(description = "券核销取消") public Map couponOrderIndependentVerifyCancel(@RequestBody Map params) { JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); // 1. check sign Map retMap = checkSign(params, payContent); @@ -202,15 +215,15 @@ public class PosController extends BaseController { logger.info(WxPayConstant.RES_KEY + ": " + resKey); try { - retMap = posService.couponOrderVerifyCancel(params, EnumPosActionType.VERIFY_CANCEL); - return buildReturnMap(retMap, resKey, WxPayConstant.RET_SUCCESS, "",null); + retObj = posService.couponOrderVerifyCancel(params); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); } catch (MallinkException e) { - return buildReturnMap(retMap, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); } catch (Exception e) { - return buildReturnMap(retMap, resKey, WxPayConstant.RET_SUCCESS, "",500, e.getMessage()); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",500, e.getMessage()); } } - + /* @ApiOperation(value = "POS支付-券", notes = "{" + "\"dev_id\":\"string(必填)\"," + "\"nonce_str\":\"string(必填)\"," + diff --git a/mallinkPosApi/src/main/java/com/iformall/service/PosService.java b/mallinkPosApi/src/main/java/com/iformall/service/PosService.java index 28d4c062c..014047d29 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/PosService.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/PosService.java @@ -1,7 +1,6 @@ package com.iformall.service; import com.alibaba.fastjson.JSONObject; -import com.iformall.enums.EnumPosActionType; import com.iformall.exception.MallinkException; import java.util.Map; @@ -24,30 +23,20 @@ public interface PosService { JSONObject queryAndCalcMem(Map params) throws MallinkException; /** - * 核销动作 + * 优惠核销(包含核销,支付预核销) * @param params * @return * @throws MallinkException */ - //Map couponOrderVerify(Map params) throws MallinkException; + JSONObject couponOrderVerify(Map params) throws MallinkException; /** - * 核销取消(check, pre_verify, verify) for selected_coupon_list + * 优惠撤销(包含核销撤销,支付预核销撤销) * @param params - * @param actionType * @return * @throws MallinkException */ - //Map couponOrderVerifyCancel(Map params, EnumPosActionType actionType) throws MallinkException; - - /** - * 核销动作(check, pre_verify, verify) for selected_coupon_list - * @param params - * @param actionType - * @return - * @throws MallinkException - */ - //Map couponOrderVerifyListDo(Map params, EnumPosActionType actionType) throws MallinkException; + JSONObject couponOrderVerifyCancel(Map params) throws MallinkException; /** * 消费卡POS预支付 diff --git a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java index daa48ed5a..69528cf3a 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -21,6 +21,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; +import springfox.documentation.spring.web.json.Json; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -32,7 +33,7 @@ public class PosServiceImpl implements PosService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - // neu时间格式, 4位年2位月2位日2位24小时制时2位分2位秒3位毫秒 + // 东软时间格式, 4位年2位月2位日2位24小时制时2位分2位秒3位毫秒 时区+8 北京时间 private final SimpleDateFormat neuDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -705,10 +706,10 @@ public class PosServiceImpl implements PosService { return discountObj; } - //@Override + @Override @Transactional(rollbackFor = Exception.class) - public Map couponOrderVerify(Map params) throws MallinkException { - Map dataMap = new HashMap<>(); + public JSONObject couponOrderVerify(Map params) throws MallinkException { + JSONObject dataMap = new JSONObject(); String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID @@ -749,6 +750,7 @@ public class PosServiceImpl implements PosService { dataMap.put(WxPayConstant.ORDER_CREATE_SN, orderCreateSN); } + // 0. 场景 Integer iSceneType; try { iSceneType = Integer.valueOf(sceneTypeStr); @@ -796,7 +798,7 @@ public class PosServiceImpl implements PosService { errParam(WxPayConstant.COUPON_ORDER_LIST); } JSONArray couponOrderArr = JSON.parseArray(coListStr); - if (couponOrderArr.size() > 1) { + if (couponOrderArr.size() != 1) { String errMessage = "核销只能使用一张券"; logger.error(errMessage); throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), errMessage); @@ -929,8 +931,8 @@ public class PosServiceImpl implements PosService { String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID - String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单总额(单位:分) - String selCoListStr = params.get(WxPayConstant.COUPON_ORDER_LIST); // 选中的优惠券列表 + String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单总额(单位:分) + String selCoListStr = params.get(WxPayConstant.COUPON_ORDER_LIST); // 选中的优惠券列表 Integer sceneType = EnumPosSceneType.PAY.getCode(); // 此接口只有支付使用 if (StringUtils.isBlank(tenantId)) { @@ -1280,48 +1282,78 @@ public class PosServiceImpl implements PosService { throw new MallinkException(500, errMessage); } - //@Override + @Override @Transactional(rollbackFor = Exception.class) - public Map couponOrderVerifyCancel(Map params, EnumPosActionType actionType) { - Map retMap = new HashMap<>(); + public JSONObject couponOrderVerifyCancel(Map params) { + JSONObject retMap = new JSONObject(); String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID - String couponOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // 券ID - String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 交易场景 + String orderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String paymentInfoStr = params.get(WxPayConstant.PAYMENT_INFO); // 优惠信息 if (StringUtils.isBlank(tenantId)) { errParam(WxPayConstant.TENANT_ID); + } else { + retMap.put(WxPayConstant.TENANT_ID, tenantId); } if (StringUtils.isBlank(merchantIdStr)) { errParam(WxPayConstant.MERCHANT_ID); + } else { + retMap.put(WxPayConstant.MERCHANT_ID, merchantIdStr); } if (StringUtils.isBlank(buUserIdStr)) { errParam(WxPayConstant.BUSER_ID); + } else { + retMap.put(WxPayConstant.BUSER_ID, buUserIdStr); } - if (StringUtils.isBlank(couponOrderIdStr)) { - errParam(WxPayConstant.COUPON_ORDER_ID); + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } else { + retMap.put(WxPayConstant.SCENE_TYPE, sceneTypeStr); } - if (actionType.equals(EnumPosActionType.PAY_VERIFY_PRE) || actionType.equals(EnumPosActionType.VERIFY_INDEPENT)) { - if (StringUtils.isBlank(posOrderIdStr)) { - errParam(WxPayConstant.POS_ORDER_ID); - } + if (StringUtils.isBlank(orderIdStr)) { + errParam(WxPayConstant.POS_ORDER_ID); + } else { + retMap.put(WxPayConstant.POS_ORDER_ID, orderIdStr); + } + if (StringUtils.isBlank(paymentInfoStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + + Integer iSceneType; + try { + iSceneType = Integer.valueOf(sceneTypeStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); } Long merchantId, buUserId, posOrderId = 0L; try { merchantId = Long.valueOf(merchantIdStr); buUserId = Long.valueOf(buUserIdStr); - posOrderId = Long.valueOf(posOrderIdStr); + posOrderId = Long.valueOf(orderIdStr); } catch (NumberFormatException e) { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); } + // 2. check merchant WxMerchant merchant = checkAndGetMerchant(merchantId); // 3. check buUser WxMerchantBUser buUser = checkAndGetMerchantUser(buUserId, merchantId); + + JSONObject paymentInfo = JSON.parseObject(paymentInfoStr); + if (paymentInfo == null) { + errParam(WxPayConstant.PAYMENT_INFO); + } + String couponOrderIdStr = paymentInfo.getString(WxPayConstant.COUPON_ID); + if (StringUtils.isBlank(couponOrderIdStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } // 4. check couponOrderId WxCouponOrderCVo couponOrderCVo = couponOrderService.detailCUserVo(couponOrderIdStr); if (couponOrderCVo == null) { @@ -1341,61 +1373,72 @@ public class PosServiceImpl implements PosService { logger.error("券: coupon-" + couponOrderCVo.getCouponId() + "核销: couponMerchantId-" + merchantIdStr + " 门店不适用"); throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); } - // 5. 核销后无法反向 WxCoupon coupon = couponMapper.selectByPrimaryKey(couponOrderCVo.getCouponId()); if (coupon.getSalePrice() > 0 || (coupon.getSubsidyType() > EnumCouponSubsidyType.NO_SUBSIDY.getCode() && coupon.getSubsidyNum() > 0)) { - logger.error("券包ID: " + couponOrderCVo.getId() + "核销无法退回"); + logger.error("券包ID: " + couponOrderIdStr + "核销无法退回"); throw new MallinkException(ErrorCode.POS_COUPON_ORDER_VERIFY_NOT_CANCEL); } WxCouponOrder couponOrder = new WxCouponOrder(); couponOrder.setId(couponOrderCVo.getId()); - - // 预核销取消 - if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) && - actionType.equals(EnumPosActionType.PAY_VERIFY_PRE_CANCEL)) { - logger.info("券已被预核销: " + couponOrderIdStr); - if (!couponOrderCVo.getBUserId().equals(buUserId)) { - logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr); - throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL); - } + // 6. 核销撤销 + if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) && + iSceneType.equals(EnumPosSceneType.VERIFY.getCode())) { + logger.info("券已被核销无法取消: " + couponOrderIdStr); + JSONObject refundObj = new JSONObject(); + String errMesg = String.format("此券核销后无法退回, 券%s抵用%s元, 购买花费%s元", + couponOrderIdStr, couponOrderCVo.getPriceStr(), couponOrderCVo.getSalePriceStr()); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, couponOrderIdStr); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, "0"); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT_MSG, errMesg); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + refundObj.put(WxPayConstant.PRICE, coupon.getPrice()); + refundObj.put(WxPayConstant.SALE_PRICE, coupon.getSalePrice()); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); + return retMap; + /* try { - cancelPreVerify(couponOrderCVo, posOrderId); - retMap.put(WxPayConstant.CANCEL, WxPayConstant.TRUE); + cancelVerify(couponOrderCVo, buUserId, posOrderId); + JSONObject refundObj = new JSONObject(); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, String.valueOf(couponOrderCVo.getId())); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, "0"); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT_MSG, "核销撤销成功"); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); return retMap; } catch (MallinkException e) { logger.error(e.getMessage()); - throw new MallinkException(e.getErrorCode(), e.getMessage()); + JSONObject refundObj = new JSONObject(); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, String.valueOf(couponOrderCVo.getId())); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, e.getErrorCode()); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT_MSG, "核销撤销失败: " + e.getMessage()); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); + return retMap; } + */ } - // 核销取消 - if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) && - actionType.equals(EnumPosActionType.VERIFY_CANCEL)) { - // 检查是否有发放的券, 有则无法退券 + // 6. 预核销取消 + else if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) && + iSceneType.equals(EnumPosSceneType.PAY.getCode())) { + logger.info("券已被预核销: " + couponOrderIdStr); + if (!couponOrderCVo.getBUserId().equals(buUserId)) { + logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr); + throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL); + } try { - cancelVerify(couponOrderCVo, buUserId, posOrderId); + cancelPreVerify(couponOrderCVo, posOrderId); retMap.put(WxPayConstant.CANCEL, WxPayConstant.TRUE); return retMap; } catch (MallinkException e) { logger.error(e.getMessage()); throw new MallinkException(e.getErrorCode(), e.getMessage()); } - /* - logger.info("券已被核销无法取消: " + couponOrderIdStr); - retMap.put(WxPayConstant.CANCEL, WxPayConstant.FALSE); - Map cancelMap = new HashMap(); - cancelMap.put(WxPayConstant.PRICE, coupon.getPrice()); - cancelMap.put(WxPayConstant.SALE_PRICE, coupon.getSalePrice()); - retMap.put(WxPayConstant.CANCEL_JSON, JSON.toJSONString(cancelMap)); - String errMessage = String.format("此券核销后无法退回,原价:%s元, 售价:%s元", coupon.getPriceStr(), coupon.getSalePriceStr()); - // TODO 系统发放的券, 也加入核销信息中 - retMap.put(WxPayConstant.CANCEL_DES, errMessage); - return retMap; - */ } - String errMessage = "取消异常:未知的核销状态-" + couponOrderCVo.getCouponOrderStatus()+ ", 核销action-" + actionType.getCode(); + + String errMessage = "取消异常:未知的核销状态-" + couponOrderCVo.getCouponOrderStatus()+ ", 场景-" + iSceneType; logger.error(errMessage); throw new MallinkException(500, errMessage); } diff --git a/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java b/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java index f2bea1db4..005fbbc70 100644 --- a/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java +++ b/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java @@ -254,9 +254,29 @@ public class PosAppTest { @Test public void couponOrderVerifyCancelTest() throws Exception { - String couponOrderId = "321878223800205312"; String posOrderId = "1"; - doCouponOrderVerifyCancel(couponOrderId, posOrderId); + String couponOrderId = "321878223800205312"; + String orderAmount = "1000"; + String amountLeft = "0"; + String sceneType = String.valueOf(EnumPosSceneType.VERIFY.getCode()); + Map reqObj = new HashMap<>(); + JSONObject paymentInfo = new JSONObject(); + paymentInfo.put(WxPayConstant.COUPON_ID, couponOrderId); + paymentInfo.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + paymentInfo.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmount); + paymentInfo.put(WxPayConstant.PROMOTION_AMOUNT, orderAmount); + paymentInfo.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, amountLeft); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.PAYMENT_INFO, JSON.toJSONString(paymentInfo)); + boolean resSigned = sendAndRes("/couponOrderVerifyCancel", reqObj); + Assert.assertEquals(resSigned, true); } @Test @@ -388,16 +408,7 @@ public class PosAppTest { } private void doCouponOrderVerifyCancel(String couponOrderId, String posOrderId) throws Exception { - Map reqObj = new HashMap<>(); - reqObj.put(WxPayConstant.NONCE_STR, "1"); - reqObj.put(WxPayConstant.DEV_ID, devId); - reqObj.put(WxPayConstant.TENANT_ID, tenantId); - reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); - reqObj.put(WxPayConstant.BUSER_ID, buUserId); - reqObj.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); - reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); - boolean resSigned = sendAndRes("/couponOrderVerifyCancel", reqObj); - Assert.assertEquals(resSigned, true); + } private void doPreVerify(String couponOrderId, String posOrderId, String posAmount) throws Exception { diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java b/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java index 2e4d70f59..fe28b0d03 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java @@ -87,6 +87,12 @@ public class WxPayConstant { public final static String COUPON_TYPE = "coupon_type"; public final static String IS_SELECTED = "is_selected"; + public final static String COUPON_REFUND_RESULT = "coupon_refund_result"; + public final static String COUPON_REFUND_ID = "coupon_refund_id"; + public final static String COUPON_REFUND_RESULT_CODE = "result_code"; + public final static String COUPON_REFUND_RESULT_MSG = "result_msg"; + public final static String REFUND_TIME_FROM_IFORMALL = "refund_time_from_iformall"; + public final static String COUPON_PROMOTION_AMOUNT = "coupon_promotion_amount"; public final static String MEMBER_DISCOUNT = "member_discount"; @@ -94,6 +100,8 @@ public class WxPayConstant { public final static String PROMOTION_DATA = "promotion_data"; public final static String PAYMENT_PREDICTION = "payment_prediction"; + public final static String PAYMENT_INFO = "payment_info"; + public final static String DEDUCT_AMOUNT = "deduct_amount"; public final static String REMAIN_AMOUNT = "remain_amount"; public final static String ORDER_STATUS = "order_status";