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 | 188 ++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 155 insertions(+), 33 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 5cea005..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 @@ -1,33 +1,41 @@ package cc.mrbird.febs.pay.service.impl; +import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; -import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallOrderInfo; +import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; -import cc.mrbird.febs.pay.model.BrandWCPayRequestData; -import cc.mrbird.febs.pay.model.JsApiPayBusiness; -import cc.mrbird.febs.pay.model.JsApiPayReqData; -import cc.mrbird.febs.pay.model.JsApiPayResData; import cc.mrbird.febs.pay.service.IXcxCodePayService; +import cc.mrbird.febs.pay.util.RandomStringGenerator; +import cc.mrbird.febs.pay.util.Signature; import cc.mrbird.febs.pay.util.WebUtil; -import cn.hutool.core.date.DateField; -import cn.hutool.core.date.DatePattern; +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; -import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult; import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest; -import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest; import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; +import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult; +import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; +import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; import java.util.Map; @Slf4j @@ -36,37 +44,151 @@ public class xcxCodePayServiceImpl implements IXcxCodePayService { private final MallOrderInfoMapper mallOrderInfoMapper; - private final WxPayService wxService; - + 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) { - WxPayMicropayRequest request = new WxPayMicropayRequest(); - request - request.setAppid(wxPayProperties.getAppId()); - request.setMchId(wxPayProperties.getMchId()); - request.setNotifyUrl(wxPayProperties.getNoticeUrl()); - request.setBody(orderInfo.getName()); - request.setOutTradeNo(orderInfo.getOrderNo()); - request.setTimeExpire(DateUtil.format(DateUtil.offset(new Date(), DateField.MINUTE, 15), DatePattern.PURE_DATETIME_PATTERN)); - request.setSpbillCreateIp("127.0.0.1"); - request.setTradeType("APP"); -// if ("dev".equals(active) || "test".equals(active)) { - if ("dev".equals(active)) { - request.setTotalFee(1); - } else { - request.setTotalFee(orderInfo.getAmount().add(orderInfo.getCarriage()).multiply(new BigDecimal(100)).intValue()); - } +// 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); + WxPayMicropayRequest request = new WxPayMicropayRequest(); + /** + * + Map<String, String> map = new HashMap<>(16); + map.put("attach", "订单额外描述"); + map.put("auth_code", auth_code); + map.put("body", "付款码支付测试"); + map.put("device_info", "1000"); + map.put("nonce_str", WXPayUtil.generateNonceStr()); + map.put("out_trade_no", out_trade_no); + map.put("spbill_create_ip", "14.17.22.52"); + map.put("total_fee", "2"); + //生成签名 + String sign = WXPayUtil.generateSignature(map, config.getKey()); + map.put("sign", sign); + */ +// request.setAppid(appId); +// request.setMchId(mchId); + request.setNonceStr(RandomStringGenerator.getRandomStringByLength(32)); + request.setBody(mallOrderInfo.getName()); + request.setOutTradeNo(mallOrderInfo.getOrderNo()); + int totalFee = mallOrderInfo.getAmount().subtract(mallOrderInfo.getCarriage()).multiply(new BigDecimal(100)).intValue(); + request.setTotalFee(totalFee); + request.setSpbillCreateIp(weixinServiceUtil.getIpAddr(WebUtil.getRequest())); + request.setAuthCode(mallOrderInfo.getTakeCode()); try { - WxPayMicropayResult micropay = wxService.micropay(request); - return JSONObject.toJSONString(micropay); + 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 { + micropay = wxPayService.micropay(request); + } catch (WxPayException e) { e.printStackTrace(); - throw new FebsException("支付异常, 请检查"); - } - return null; + 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(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + String outTradeNo = mallOrderInfo.getOrderNo(); + WxPayOrderQueryRequest wxPayOrderQueryRequest = new WxPayOrderQueryRequest(); + wxPayOrderQueryRequest.setOutTradeNo(outTradeNo); + log.info("付款码支付订单查询"); + WxPayOrderQueryResult wxPayOrderQueryResult = null; + try { + wxPayOrderQueryResult = wxPayService.queryOrder(wxPayOrderQueryRequest); + } catch (WxPayException e) { + e.printStackTrace(); + } + String returnCodePaying = wxPayOrderQueryResult.getReturnCode(); + String tradeTypePaying = wxPayOrderQueryResult.getTradeType(); + 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 tradeStateDesc; + } + } + } + } + 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 @@ -80,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