From 1443f8eb9f3b001e84f101852aa5f6ec7f49f4c9 Mon Sep 17 00:00:00 2001 From: jyy <935090232@qq.com> Date: Fri, 09 Apr 2021 14:34:12 +0800 Subject: [PATCH] 微信储值卡充值接口 --- zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java | 137 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 127 insertions(+), 10 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java index d5423a3..5246abe 100644 --- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java @@ -10,9 +10,12 @@ import com.matrix.system.common.bean.BusParameterSettings; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.dao.BusParameterSettingsDao; +import com.matrix.system.hive.bean.MoneyCardUse; +import com.matrix.system.hive.bean.MoneyCardUseFlow; import com.matrix.system.hive.bean.SysVipInfo; +import com.matrix.system.hive.dao.MoneyCardUseDao; +import com.matrix.system.hive.dao.MoneyCardUseFlowDao; import com.matrix.system.hive.dao.SysVipInfoDao; -import com.matrix.system.score.entity.ScoreVipDetail; import com.matrix.system.score.service.ScoreVipDetailService; import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoin; import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoinUser; @@ -90,11 +93,6 @@ private String evn; /** * 微信支付回调接口 - * - * @param response - * @param request - * @throws IOException - * @throws Exception */ @Transactional(rollbackFor = Exception.class) @RequestMapping(value = "/wxapi/wxpayCallback") @@ -206,7 +204,7 @@ resXml = AppConstance.RESULT_XML_SUCCESS; //支付记录 - recordPayLog(Integer.valueOf(orderId), payMoney, order, payLog, "支付成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS); + recordPayLog(Integer.valueOf(orderId), 1, order.getOrderNo(), payMoney, payLog, "支付成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS); } else { @@ -245,12 +243,131 @@ } - private void recordPayLog(Integer orderId, BigDecimal payMoney, ShopOrder order, ShopPayLog payLog, String payRemark, int payStatus) { + + @Autowired + MoneyCardUseFlowDao moneyCardUseFlowDao; + + @Autowired + MoneyCardUseDao moneyCardUseDao; + + /** + * 微信充值回调 + */ + @Transactional(rollbackFor = Exception.class) + @RequestMapping(value = "/wxapi/rechargeCallBack") + public void rechargeCallBack(HttpServletResponse response, HttpServletRequest request) throws IOException { + LogUtil.info("微信充值回调start...."); + + // 获取输入参数 + String inputLine; + StringBuffer notityXml = new StringBuffer(); + String resXml = ""; + String moneyCardUseFlowId = ""; + + AjaxResult threadResult = new AjaxResult(AjaxResult.STATUS_SUCCESS, ""); + try { + while ((inputLine = request.getReader().readLine()) != null) { + notityXml.append(inputLine); + } + request.getReader().close(); + LogUtil.info("notityXml ---- :{} ", notityXml); + + + // XMl转对象 + Object bb = Util.getObjectFromXML(notityXml.toString(), NotifyData.class); + NotifyData data = new NotifyData(); + BeanUtils.copyProperties(bb,data); + LogUtil.info("----return_code = {}", data.getReturn_code()); + + + // 返回状态码 SUCCESS/FAIL + if (AppConstance.CODE_SUCCESS.equals(data.getReturn_code())) { + + moneyCardUseFlowId = data.getAttach(); + // 检验订单状态 + MoneyCardUseFlow moneyCardUseFlow = moneyCardUseFlowDao.selectById(Long.valueOf(moneyCardUseFlowId)); + SysVipInfo user=sysVipInfoDao.selectById(moneyCardUseFlow.getVipId()); + + // 校验签名 + BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, user.getCompanyId()); + if (Signature.checkIsSignValidFromResponseString(notityXml.toString(),paySecret.getParamValue())) { + // 校验业务结果 + if (AppConstance.CODE_SUCCESS.equals(data.getResult_code())) { + // 返回SUCCESS报文 + resXml = AppConstance.RESULT_XML_SUCCESS; + // 支付费用 + Double total_fee = Double.parseDouble(data.getTotal_fee()); + // 商户订单号 + String payNum = data.getOut_trade_no(); + + LogUtil.info("支付回调关键信息---total_fee:{},payNum:{},moneyCardUseFlowId:{}", total_fee, payNum, moneyCardUseFlowId); + // 订单ID + Double payMoney = new BigDecimal(total_fee).divide(new BigDecimal(100), 2, + BigDecimal.ROUND_HALF_DOWN).doubleValue(); + + if (moneyCardUseFlow.getCarUseId()==null) { + ShopPayLog payLog = new ShopPayLog(); + if(payMoney==moneyCardUseFlow.getTotal()){ + threadResult.putInMap("status", "success"); + resXml = AppConstance.RESULT_XML_SUCCESS; + MoneyCardUse moneyCardUse = moneyCardUseDao.selectVipCard(user.getId()); + moneyCardUseFlow.setCarUseId(moneyCardUse.getId()); + moneyCardUseFlow.setCardName(moneyCardUse.getCardName()); + moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney()); + moneyCardUseFlowDao.update(moneyCardUseFlow); + //充值记录 + recordPayLog(Integer.valueOf(moneyCardUseFlowId),2,moneyCardUseFlow.getPayNo(),new BigDecimal(payMoney), payLog, "充值成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS); + }else{ + LogUtil.debug("支付金额不一致,检查支付金额payMoney={},order.getPayMoney()={}", payMoney, moneyCardUseFlow.getTotal()); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "支付金额不一致"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "微信标识业务是失败"); + } + + } else { + LogUtil.info("充值已经确认"); + } + + } else { + LogUtil.info("微信标识业务是失败"); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:001)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "微信标识业务是失败"); + } + } else { + LogUtil.info("无效签名"); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:002)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "微信标识业务是失败"); + } + } else { + LogUtil.info("通信标识失败"); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:003)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "通信标识失败"); + } + } catch (Exception e) { + LogUtil.error("支付回调签名错误", e); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:004)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "支付回调签名错误"); + } finally { + // 通知线程消息 + PayThreadPool.notifyThread(Integer.valueOf(moneyCardUseFlowId), threadResult); + sendResultBack(response, resXml); + } + return; + + } + + + + private void recordPayLog(Integer orderId, Integer type,String orderNo, BigDecimal payMoney, ShopPayLog payLog, String payRemark, int payStatus) { //设置支付类型为收款 - payLog.setPayType(1); + payLog.setPayType(type); payLog.setJoinId(orderId); payLog.setPayMoney(payMoney); - payLog.setPayOrderNo(order.getOrderNo()); + payLog.setPayOrderNo(orderNo); payLog.setPayRemark(payRemark); payLog.setPayStatus(payStatus); payLog.setCreateBy(AppConstance.SYSTEM_USER); -- Gitblit v1.9.1