| | |
| | | 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) { |
| | | |
| | |
| | | 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(); |
| | | micropay = wxPayService.micropay(request); |
| | | |
| | | } 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(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("微信免密支付成功"); |
| | |
| | | } |
| | | 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)){ |
| | | } else if(PAY_FAIL.equals(resultCode)){ |
| | | return errCodeDes; |
| | | } |
| | | return errCodeDes; |
| | | } catch (WxPayException e) { |
| | | e.printStackTrace(); |
| | | throw new FebsException(e.getErrCodeDes()); |
| | | } |
| | | } |
| | | |
| | | @Override |