KKSU
2023-12-25 80dafbb830ed4f5bc38037fc4c4e574eb5f55629
src/main/java/cc/mrbird/febs/pay/service/impl/xcxCodePayServiceImpl.java
@@ -49,8 +49,10 @@
    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) {
@@ -118,65 +120,75 @@
            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("微信免密支付成功");
                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_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;
            }
            return errCodeDes;
        } catch (WxPayException e) {
            e.printStackTrace();
            throw new FebsException(e.getErrCodeDes());
            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