diff --git a/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/controller/RechargeController.java b/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/controller/RechargeController.java index 9ef5bdb..966dbf3 100644 --- a/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/controller/RechargeController.java +++ b/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/controller/RechargeController.java @@ -40,13 +40,13 @@ public class RechargeController { @ApiOperation(value = "支付回调") @RequestMapping(value = "/pay-notify") - public CommonResult frontRcvResponse(HttpServletRequest request){ + public String frontRcvResponse(HttpServletRequest request){ return accountRechargeService.pcNotifyResponse(request); } @ApiOperation(value = "同步历史数据支付回调") @RequestMapping(value = "/pay-notify-two") - public CommonResult frontRcvResponseTwo(HttpServletRequest request) { + public String frontRcvResponseTwo(HttpServletRequest request) { return accountRechargeService.pcTwoNotifyResponse(request); } diff --git a/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/AccountRechargeService.java b/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/AccountRechargeService.java index 63b80e3..88218a1 100644 --- a/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/AccountRechargeService.java +++ b/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/AccountRechargeService.java @@ -31,7 +31,7 @@ public interface AccountRechargeService { * @param request * @return */ - CommonResult pcNotifyResponse(HttpServletRequest request); + String pcNotifyResponse(HttpServletRequest request); /** * 同步历史数据支付创建订单 @@ -45,7 +45,7 @@ public interface AccountRechargeService { * @param request * @return */ - CommonResult pcTwoNotifyResponse(HttpServletRequest request); + String pcTwoNotifyResponse(HttpServletRequest request); /** * 查询同步数据支付数据 diff --git a/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/impl/AccountRechargeServiceImpl.java b/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/impl/AccountRechargeServiceImpl.java index bc4d83a..87eb60c 100644 --- a/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/impl/AccountRechargeServiceImpl.java +++ b/service/trade-service-others/trade-service-others-account/src/main/java/com/hchbox/module/service/impl/AccountRechargeServiceImpl.java @@ -132,6 +132,7 @@ public class AccountRechargeServiceImpl implements AccountRechargeService { order.setPayType(aliPayPcVo.getPayType()); order.setTemplateId(aliPayPcVo.getTemplateId()); order.setStatus(DefaultNumberConstants.ZERO_NUMBER); + order.setIsCallback(DefaultNumberConstants.ZERO_NUMBER); return payOrderRepository.save(order).getId() != null; } @@ -142,48 +143,56 @@ public class AccountRechargeServiceImpl implements AccountRechargeService { * @return {@link CommonResult}<{@link String}> */ @Override - public CommonResult pcNotifyResponse(HttpServletRequest request) { - log.info("======================支付回调开始时间:======================{}", LocalTime.now()); - int i = 0; - PayOrder order = null; - try { - //获取支付宝GET过来反馈信息 + @Transactional(rollbackFor = Exception.class) + public String pcNotifyResponse(HttpServletRequest request) { + //商户订单号 + String orderNo = new String(request.getParameter(PayConstants.OUT_TRADE_NO). + getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + //查询订单信息 + PayOrder order = payOrderRepository.findByOrderNumber(orderNo); + if (order != null && order.getIsCallback() == 0) { + log.info("======================支付回调开始时间:{}", LocalTime.now()); + //先更新回调状态,防止二次回调 + order.setIsCallback(DefaultNumberConstants.ONE_NUMBER); + payOrderRepository.save(order); + int i = 0; + try { + //获取支付宝GET过来反馈信息 // Map params = new HashMap<>(DefaultNumberConstants.TWO_NUMBER); - // 处理乱码问题 + // 处理乱码问题 // checkParam(request, params); - Map params = getAllRequestParam(request); - Boolean flag = Factory.Payment.Common().verifyNotify(params); - //商户订单号 - String orderNo = new String(request.getParameter(PayConstants.OUT_TRADE_NO). - getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); - if (flag != null && flag) { - log.info(" order verify signature success the orderNumber as {}", orderNo); - order = payOrderRepository.findByOrderNumber(orderNo); - if (order != null && order.getStatus() == 0) { - order.setPayTime(DateUtil.date()); - order.setStatus(DefaultNumberConstants.ONE_NUMBER); - payOrderRepository.save(order); - i++; - //同步到聚石塔内数据 - JSONObject jsonObject = requestCore.savePayOrder(order); - if (DefaultNumberConstants.TWO_HUNDRED == (Integer) jsonObject.get("code")) { + //获取支付宝GET过来反馈信息 + Map params = getAllRequestParam(request); + //验签 + Boolean flag = Factory.Payment.Common().verifyNotify(params); + if (flag != null && flag) { + log.info(" order verify signature success the orderNumber as {}", orderNo); + if (order != null && order.getStatus() == 0) { + order.setPayTime(DateUtil.date()); + order.setStatus(DefaultNumberConstants.ONE_NUMBER); + payOrderRepository.save(order); i++; - //子账号授权 - JSONObject jsonObject1 = requestCore.authorizeChildrenAccount(order.getMasterUserId(), order.getNickName(), order.getTemplateId()); - if (DefaultNumberConstants.TWO_HUNDRED != (Integer) jsonObject1.get("code")) { - updateRollBack(order, DefaultNumberConstants.TWO_NUMBER); + //同步到聚石塔内数据 + JSONObject jsonObject = requestCore.savePayOrder(order); + if (DefaultNumberConstants.TWO_HUNDRED == (Integer) jsonObject.get("code")) { + i++; + //子账号授权 + JSONObject jsonObject1 = requestCore.authorizeChildrenAccount(order.getMasterUserId(), order.getNickName(), order.getTemplateId()); + if (DefaultNumberConstants.TWO_HUNDRED != (Integer) jsonObject1.get("code")) { + updateRollBack(order, DefaultNumberConstants.TWO_NUMBER); + } + } else { + updateRollBack(order, DefaultNumberConstants.ONE_NUMBER); } - } else { - updateRollBack(order, DefaultNumberConstants.ONE_NUMBER); } } + } catch (Exception e) { + updateRollBack(order, i); + log.error("the pc response error time {}", LocalTime.now()); + return "success"; } - } catch (Exception e) { - updateRollBack(order, i); - log.error("the pc response error time {}", LocalTime.now()); - throw new TaoMiCommException(ResponseCode.CALLBACK_FAILED.getDesc()); } - return CommonResult.successfulOperation(); + return "success"; } private void updateRollBack(PayOrder payOrder, int i) { @@ -217,6 +226,7 @@ public class AccountRechargeServiceImpl implements AccountRechargeService { payTwoOrder.setStatus(DefaultNumberConstants.ZERO_NUMBER); payTwoOrder.setFinalAmount(num); payTwoOrder.setOrderStatus(DefaultNumberConstants.ZERO_NUMBER); + payTwoOrder.setIsCallback(DefaultNumberConstants.ZERO_NUMBER); payTwoOrderRepository.save(payTwoOrder); return new CommonResult().success(response.getBody()); } @@ -239,56 +249,64 @@ public class AccountRechargeServiceImpl implements AccountRechargeService { * @param request */ @Override - public CommonResult pcTwoNotifyResponse(HttpServletRequest request) { - log.info("======================同步支付回调开始时间:======================{}", LocalTime.now()); - int i = 0; - PayTwoOrder order = null; - try { - //获取支付宝GET过来反馈信息 + @Transactional(rollbackFor = Exception.class) + public String pcTwoNotifyResponse(HttpServletRequest request) { + //商户订单号 + String orderNo = new String(request.getParameter(PayConstants.OUT_TRADE_NO). + getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + //查询订单信息 + PayTwoOrder order = payTwoOrderRepository.findByOrderNumber(orderNo); + if (order != null && order.getIsCallback() == 0) { + log.info("======================同步支付回调开始时间:{}", LocalTime.now()); + //先更新回调状态,防止二次回调 + order.setIsCallback(DefaultNumberConstants.ONE_NUMBER); + payTwoOrderRepository.save(order); + int i = 0; + try { + //获取支付宝GET过来反馈信息 // Map params = new HashMap<>(DefaultNumberConstants.TWO_NUMBER); - // 处理乱码问题 + // 处理乱码问题 // checkParam(request, params); - Map params = getAllRequestParam(request); - Boolean flag = Factory.Payment.Common().verifyNotify(params); - //商户订单号 - String orderNo = new String(request.getParameter(PayConstants.OUT_TRADE_NO). - getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); - if (flag != null && flag) { - log.info(" order verify signature success the orderNumber as {}", orderNo); - order = payTwoOrderRepository.findByOrderNumber(orderNo); - if (order != null && order.getStatus() == 0) { - order.setPayTime(DateUtil.date()); - order.setStatus(DefaultNumberConstants.ONE_NUMBER); - payTwoOrderRepository.save(order); - i++; - //同步数据 - JSONObject jsonObject = requestCore.savePayTwoOrder(order); - if (DefaultNumberConstants.TWO_HUNDRED == (Integer) jsonObject.get("code")) { + //获取支付宝GET过来反馈信息 + Map params = getAllRequestParam(request); + //验签 + Boolean flag = Factory.Payment.Common().verifyNotify(params); + if (flag != null && flag) { + log.info(" order verify signature success the orderNumber as {}", orderNo); + if (order != null && order.getStatus() == 0) { + order.setPayTime(DateUtil.date()); + order.setStatus(DefaultNumberConstants.ONE_NUMBER); + payTwoOrderRepository.save(order); i++; - // 修改账户信息 开通服务 - JSONObject jsonObject2 = requestCore.updateSellerAccount(order, false); - if (DefaultNumberConstants.TWO_HUNDRED != (Integer) jsonObject2.get("code")) { - log.error("++++++++++++++++修改账户信息,开通淘宝服务失败:{}", order.getNickName()); - order.setOrderStatus(i); + //同步数据 + JSONObject jsonObject = requestCore.savePayTwoOrder(order); + if (DefaultNumberConstants.TWO_HUNDRED == (Integer) jsonObject.get("code")) { + i++; + // 修改账户信息 开通服务 + JSONObject jsonObject2 = requestCore.updateSellerAccount(order, false); + if (DefaultNumberConstants.TWO_HUNDRED != (Integer) jsonObject2.get("code")) { + log.error("++++++++++++++++修改账户信息,开通淘宝服务失败:{}", order.getNickName()); + order.setOrderStatus(i); + requestCore.updateTwoPayOrder(order); + } + } else { + log.error("++++++++++++++++同步到聚石塔内数据失败:{}", order.getNickName()); + order.setOrderStatus(DefaultNumberConstants.ONE_NUMBER); requestCore.updateTwoPayOrder(order); } - } else { - log.error("++++++++++++++++同步到聚石塔内数据失败:{}", order.getNickName()); - order.setOrderStatus(DefaultNumberConstants.ONE_NUMBER); - requestCore.updateTwoPayOrder(order); } } + } catch (Exception e) { + order.setOrderStatus(i); + if (i > DefaultNumberConstants.ONE_NUMBER) { + requestCore.updateTwoPayOrder(order); + } + payTwoOrderRepository.save(order); + log.error("the pc response error time {}", LocalTime.now()); + return "success"; } - } catch (Exception e) { - order.setOrderStatus(i); - if (i > DefaultNumberConstants.ONE_NUMBER) { - requestCore.updateTwoPayOrder(order); - } - payTwoOrderRepository.save(order); - log.error("the pc response error time {}", LocalTime.now()); - throw new TaoMiCommException(ResponseCode.CALLBACK_FAILED.getDesc()); } - return CommonResult.successfulOperation(); + return "success"; } // private void checkParam(HttpServletRequest request, Map params) { diff --git a/trade-common/src/main/java/com/hchbox/model/entity/BasePayOrder.java b/trade-common/src/main/java/com/hchbox/model/entity/BasePayOrder.java index 8927da3..1d7f80d 100644 --- a/trade-common/src/main/java/com/hchbox/model/entity/BasePayOrder.java +++ b/trade-common/src/main/java/com/hchbox/model/entity/BasePayOrder.java @@ -75,4 +75,8 @@ public class BasePayOrder implements Serializable { @Column(name = "order_status") @ApiModelProperty(value = "订单状态") private Integer orderStatus; + + @Column(name = "is_callback") + @ApiModelProperty(value = "是否回调过 0:未回调 1:已回调") + private Integer isCallback; } diff --git a/trade-common/src/main/java/com/hchbox/model/entity/BasePayTwoOrder.java b/trade-common/src/main/java/com/hchbox/model/entity/BasePayTwoOrder.java index 1c567bd..3181f5c 100644 --- a/trade-common/src/main/java/com/hchbox/model/entity/BasePayTwoOrder.java +++ b/trade-common/src/main/java/com/hchbox/model/entity/BasePayTwoOrder.java @@ -75,4 +75,8 @@ public class BasePayTwoOrder implements Serializable { @Column(name = "master_user_id") @ApiModelProperty(value = "主账号id") private Long masterUserId; + + @Column(name = "is_callback") + @ApiModelProperty(value = "是否回调过 0:未回调 1:已回调") + private Integer isCallback; }