KKSU
2023-12-22 0e3064b8722b33ee2cf67f8fac581a8b0e04832b
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,45 @@
    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_USERPAYING = "USERPAYING";
    private static final String PAY_FAIL = "FAIL";
    @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 +102,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,7 +113,7 @@
        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("签名异常");
@@ -128,38 +131,51 @@
            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++){
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                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);
                    }
                    //调用微信的查询接口
                    /**
                     * 交易成功判断条件: return_code、result_code和trade_state都为SUCCESS
                     */
                    WxPayOrderQueryRequest wxPayOrderQueryRequest = new WxPayOrderQueryRequest();
                    wxPayOrderQueryRequest.setOutTradeNo(outTradeNo);
                    WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder(wxPayOrderQueryRequest);
                    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)){
                        log.info("微信加密支付成功!");
                }
                        agentProducer.sendSyAppOrderPayDoneQueue(outTradeNo);
                        return PAY_SUCCESS;
                    }
                    log.info("正在支付" + wxPayOrderQueryResult.getDetail());
//            else if (PAY_USERPAYING.equals(errCode)){//等待用户输入密码
//                for(int i = 0; i < 4; i++){
//                    try {
//                        Thread.sleep(5000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    //调用微信的查询接口
//                    /**
//                     * 交易成功判断条件: return_code、result_code和trade_state都为SUCCESS
//                     */
//                    WxPayOrderQueryRequest wxPayOrderQueryRequest = new WxPayOrderQueryRequest();
//                    wxPayOrderQueryRequest.setOutTradeNo(outTradeNo);
//                    log.info("付款码支付订单查询");
//                    WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder(wxPayOrderQueryRequest);
//                    String returnCodePaying = wxPayOrderQueryResult.getReturnCode();
//                    String resultCodePaying = wxPayOrderQueryResult.getResultCode();
//                    String tradeTypePaying = wxPayOrderQueryResult.getTradeType();
//                    if(PAY_SUCCESS.equals(tradeTypePaying)&& PAY_SUCCESS.equals(returnCodePaying)&& PAY_SUCCESS.equals(tradeTypePaying)){
//                        log.info("微信加密支付成功!");
//                        agentProducer.sendSyAppOrderPayDoneQueue(outTradeNo);
//                        return PAY_SUCCESS;
//                    }
//                    log.info("正在支付" + wxPayOrderQueryResult.getDetail());
//                }
//            }
            else if(PAY_FAIL.equals(resultCode)){
                return errCodeDes;
                }
            }
            log.error("微信支付失败!");
            return errCodeDes;
        } catch (WxPayException e) {
            e.printStackTrace();
            throw new FebsException("支付异常");
            throw new FebsException(e.getErrCodeDes());
        }
    }
@@ -174,7 +190,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);