From c619972c50577bb699be6ee099b5e2741882fabb Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 27 Dec 2023 16:15:59 +0800 Subject: [PATCH] 直推奖励,冻结的用户,则直推奖励销毁,用户未冻结才能领取成功 --- src/main/java/cc/mrbird/febs/pay/service/impl/xcxCodePayServiceImpl.java | 156 ++++++++++++++++++++++++++++++--------------------- 1 files changed, 92 insertions(+), 64 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/xcxCodePayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/xcxCodePayServiceImpl.java index 950130a..8eca37e 100644 --- a/src/main/java/cc/mrbird/febs/pay/service/impl/xcxCodePayServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/pay/service/impl/xcxCodePayServiceImpl.java @@ -13,6 +13,7 @@ import cc.mrbird.febs.pay.util.WeixinServiceUtil; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -46,43 +47,47 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final WeixinServiceUtil weixinServiceUtil; private final AgentProducer agentProducer; + private final WxPayService wxPayService; private static final String PAY_SUCCESS = "SUCCESS"; + private static final String PAY_WAITING = "等待用户输入密码"; private static final String PAY_USERPAYING = "USERPAYING"; + private static final String PAY_FAIL = "FAIL"; + private static final String TRADE_TYPE = "MICROPAY"; @Override public String pay(MallOrderInfo mallOrderInfo) { - String appId = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.XCX_APP_ID.getType(), - DataDictionaryEnum.XCX_APP_ID.getCode() - ).getValue(); - String mchId = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.XCX_MCH_ID.getType(), - DataDictionaryEnum.XCX_MCH_ID.getCode() - ).getValue(); - String paySecret = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.XCX_MCH_KEY.getType(), - DataDictionaryEnum.XCX_MCH_KEY.getCode() - ).getValue(); - String keyPath = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.XCX_MCH_KEY_PATH_P12.getType(), - DataDictionaryEnum.XCX_MCH_KEY_PATH_P12.getCode() - ).getValue(); - String notifyUrl = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.XCX_NOTICE_URL.getType(), - DataDictionaryEnum.XCX_NOTICE_URL.getCode() - ).getValue(); - WxPayConfig payConfig = new WxPayConfig(); - payConfig.setAppId(StrUtil.trim(appId)); - payConfig.setMchId(StrUtil.trim(mchId)); - payConfig.setMchKey(StrUtil.trim(paySecret)); - payConfig.setKeyPath(StrUtil.trim(keyPath)); - payConfig.setNotifyUrl(StrUtil.trim(notifyUrl)); +// String appId = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( +// DataDictionaryEnum.XCX_APP_ID.getType(), +// DataDictionaryEnum.XCX_APP_ID.getCode() +// ).getValue(); +// String mchId = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( +// DataDictionaryEnum.XCX_MCH_ID.getType(), +// DataDictionaryEnum.XCX_MCH_ID.getCode() +// ).getValue(); +// String paySecret = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( +// DataDictionaryEnum.XCX_MCH_KEY.getType(), +// DataDictionaryEnum.XCX_MCH_KEY.getCode() +// ).getValue(); +// String keyPath = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( +// DataDictionaryEnum.XCX_MCH_KEY_PATH_P12.getType(), +// DataDictionaryEnum.XCX_MCH_KEY_PATH_P12.getCode() +// ).getValue(); +// String notifyUrl = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( +// DataDictionaryEnum.XCX_NOTICE_URL.getType(), +// DataDictionaryEnum.XCX_NOTICE_URL.getCode() +// ).getValue(); +// WxPayConfig payConfig = new WxPayConfig(); +// payConfig.setAppId(StrUtil.trim(appId)); +// payConfig.setMchId(StrUtil.trim(mchId)); +// payConfig.setMchKey(StrUtil.trim(paySecret)); +// payConfig.setKeyPath(StrUtil.trim(keyPath)); +// payConfig.setNotifyUrl(StrUtil.trim(notifyUrl)); // 可以指定是否使用沙箱环境 - payConfig.setUseSandboxEnv(false); - - WxPayService wxPayService = new WxPayServiceImpl(); - wxPayService.setConfig(payConfig); +// payConfig.setUseSandboxEnv(false); +// +// WxPayService wxPayService = new WxPayServiceImpl(); +// wxPayService.setConfig(payConfig); WxPayMicropayRequest request = new WxPayMicropayRequest(); /** * @@ -99,8 +104,8 @@ String sign = WXPayUtil.generateSignature(map, config.getKey()); map.put("sign", sign); */ - request.setAppid(appId); - request.setMchId(mchId); +// request.setAppid(appId); +// request.setMchId(mchId); request.setNonceStr(RandomStringGenerator.getRandomStringByLength(32)); request.setBody(mallOrderInfo.getName()); request.setOutTradeNo(mallOrderInfo.getOrderNo()); @@ -110,57 +115,80 @@ request.setAuthCode(mallOrderInfo.getTakeCode()); try { - request.setSign(Signature.getSign(request,paySecret)); + request.setSign(Signature.getSign(request,wxPayService.getConfig().getMchKey())); } catch (IllegalAccessException e) { e.printStackTrace(); throw new FebsException("签名异常"); } + WxPayMicropayResult micropay = null; + String errCode = null; + String errCodeDes = null; try { - WxPayMicropayResult micropay = wxPayService.micropay(request); - String returnCode = micropay.getReturnCode(); - String resultCode = micropay.getResultCode(); - String errCode = micropay.getErrCode(); - String outTradeNo = micropay.getOutTradeNo(); - String errCodeDes = micropay.getErrCodeDes(); - /** - * 交易成功判断条件:return_code和result_code都为SUCCESS且trade_type为MICROPAY - */ + micropay = wxPayService.micropay(request); - if(PAY_SUCCESS.equals(returnCode) && PAY_SUCCESS.equals(resultCode)){ - log.info("微信免密支付成功"); - agentProducer.sendSyAppOrderPayDoneQueue(outTradeNo); - return PAY_SUCCESS; - } else if (PAY_USERPAYING.equals(errCode)){//等待用户输入密码 - for(int i = 0; i < 4; i++){ + } catch (WxPayException e) { + e.printStackTrace(); + errCode = e.getErrCode(); + errCodeDes = e.getErrCodeDes(); +// throw new FebsException(e.getErrCodeDes()); + }finally { + if (PAY_USERPAYING.equals(errCode)){//等待用户输入密码 + for(int i = 0; i < 5; i++){ try { - Thread.sleep(5000); + Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } - //调用微信的查询接口 - /** - * 交易成功判断条件: return_code、result_code和trade_state都为SUCCESS - */ + + String outTradeNo = mallOrderInfo.getOrderNo(); WxPayOrderQueryRequest wxPayOrderQueryRequest = new WxPayOrderQueryRequest(); wxPayOrderQueryRequest.setOutTradeNo(outTradeNo); - WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder(wxPayOrderQueryRequest); + log.info("付款码支付订单查询"); + WxPayOrderQueryResult wxPayOrderQueryResult = null; + try { + wxPayOrderQueryResult = wxPayService.queryOrder(wxPayOrderQueryRequest); + } catch (WxPayException e) { + e.printStackTrace(); + } String returnCodePaying = wxPayOrderQueryResult.getReturnCode(); - String resultCodePaying = wxPayOrderQueryResult.getResultCode(); String tradeTypePaying = wxPayOrderQueryResult.getTradeType(); - if(PAY_SUCCESS.equals(tradeTypePaying)&& PAY_SUCCESS.equals(returnCodePaying)&& PAY_SUCCESS.equals(resultCodePaying)){ + String resultCodePaying = wxPayOrderQueryResult.getResultCode(); + String tradeStateDesc = wxPayOrderQueryResult.getTradeStateDesc(); + /** + * 交易成功判断条件:return_code和result_code都为SUCCESS且trade_type为MICROPAY + */ + if(PAY_SUCCESS.equals(resultCodePaying)&& PAY_SUCCESS.equals(returnCodePaying)&& TRADE_TYPE.equals(tradeTypePaying)){ log.info("微信加密支付成功!"); agentProducer.sendSyAppOrderPayDoneQueue(outTradeNo); - return PAY_SUCCESS; + return tradeStateDesc; } - log.info("正在支付" + wxPayOrderQueryResult.getDetail()); } } - log.error("微信支付失败!"); - return errCodeDes; - } catch (WxPayException e) { - e.printStackTrace(); - throw new FebsException("支付异常"); } + if(ObjectUtil.isEmpty(micropay)){ + return errCodeDes; + } + String returnCode = micropay.getReturnCode(); + String resultCode = micropay.getResultCode(); + String outTradeNo = micropay.getOutTradeNo(); + + if(PAY_SUCCESS.equals(returnCode) && PAY_SUCCESS.equals(resultCode)){ + log.info("微信免密支付成功"); + MallOrderInfo orderInfo = mallOrderInfoMapper.selectByOrderNo(mallOrderInfo.getOrderNo()); + if(ObjectUtil.isNotEmpty(orderInfo)){ + if (OrderStatusEnum.FINISH.getValue() != orderInfo.getStatus()) { + orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); + orderInfo.setPayResult(1); + orderInfo.setPayTime(DateUtil.date()); + mallOrderInfoMapper.updateById(orderInfo); + } + } + agentProducer.sendSyAppOrderPayDoneQueue(outTradeNo); + return PAY_SUCCESS; + } else if(PAY_FAIL.equals(resultCode)){ + return errCodeDes; + } + return errCodeDes; } @Override @@ -174,7 +202,7 @@ return; } orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); - orderInfo.setPayResult("1"); + orderInfo.setPayResult(1); orderInfo.setPayTime(DateUtil.date()); orderInfo.setPayTradeNo(params.get("transaction_id")); mallOrderInfoMapper.updateById(orderInfo); -- Gitblit v1.9.1