|
|
|
@ -349,9 +349,15 @@ public class WxPayHelper { |
|
|
|
|
|
|
|
|
|
// micropay.setDetail("描述"); // 商品描述
|
|
|
|
|
|
|
|
|
|
Order wxOrder; |
|
|
|
|
MicropayResult micropayResult = PayMchAPI.payMicropay(micropay, mchKey); |
|
|
|
|
if (micropayResult == null) { |
|
|
|
|
order.setErrorMsg("【微信】盒子扫码支付请求失败"); |
|
|
|
|
log.warn("【微信】[盒子支付]下单异常 outTradeNo={}", outTradeNo); |
|
|
|
|
wxOrder = waitMicoPay(outTradeNo); // 可能会出现支付成功,但是接口响应失败的情况
|
|
|
|
|
if (wxOrder != null) { |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
order.setErrorMsg("【微信】[盒子支付]调用下单接口异常"); |
|
|
|
|
return order; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -374,41 +380,12 @@ public class WxPayHelper { |
|
|
|
|
return order; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Order wxOrder; |
|
|
|
|
if (FAIL.equals(resultCode)) { // 失败
|
|
|
|
|
if (USER_PAYING.equals(errCode)) { // 密码支付
|
|
|
|
|
log.info("【微信】[盒子支付]密码支付 outTradeNo={}, msg={}", outTradeNo, errMsg); |
|
|
|
|
for (int i = 1; i <= 5; i++) { |
|
|
|
|
try { |
|
|
|
|
Thread.sleep(5000 + ((i - 1) * 1500)); // 总共35s
|
|
|
|
|
wxOrder = queryOrder(outTradeNo); |
|
|
|
|
if (wxOrder.isSuccess()) { |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 支付失败
|
|
|
|
|
if (PAY_ERROR.equals(wxOrder.getTradeState())) { |
|
|
|
|
if (i == 1 || i == 2) { |
|
|
|
|
Thread.sleep(i == 2 ? 3000 : 9000); // 等够15s
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 撤销订单
|
|
|
|
|
Order cancelOrder = cancelOrder(wxOrder.getOutTradeNo(), wxOrder.getBankTransNo()); |
|
|
|
|
// 撤销成功
|
|
|
|
|
if (cancelOrder.isSuccess()) { |
|
|
|
|
wxOrder.setTradeState(REVOKED); |
|
|
|
|
wxOrder.setErrorMsg("订单已撤销"); |
|
|
|
|
} |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 其他失败原因
|
|
|
|
|
if (!USER_PAYING.equals(wxOrder.getTradeState())) { |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
wxOrder = waitMicoPay(outTradeNo); |
|
|
|
|
if (wxOrder != null) { |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
order.setErrorCode(errCode); |
|
|
|
@ -440,6 +417,44 @@ public class WxPayHelper { |
|
|
|
|
return order; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 等待扫码盒子支付
|
|
|
|
|
private static Order waitMicoPay(String outTradeNo) { |
|
|
|
|
Order wxOrder; |
|
|
|
|
for (int i = 1; i <= 5; i++) { |
|
|
|
|
try { |
|
|
|
|
Thread.sleep(5000 + ((i - 1) * 1500)); // 总共35s
|
|
|
|
|
wxOrder = queryOrder(outTradeNo); |
|
|
|
|
if (wxOrder.isSuccess()) { |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 支付失败
|
|
|
|
|
if (PAY_ERROR.equals(wxOrder.getTradeState())) { |
|
|
|
|
if (i == 1 || i == 2) { |
|
|
|
|
Thread.sleep(i == 2 ? 3000 : 9000); // 等够15s
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 撤销订单
|
|
|
|
|
Order cancelOrder = cancelOrder(wxOrder.getOutTradeNo(), wxOrder.getBankTransNo()); |
|
|
|
|
// 撤销成功
|
|
|
|
|
if (cancelOrder.isSuccess()) { |
|
|
|
|
wxOrder.setTradeState(REVOKED); |
|
|
|
|
wxOrder.setErrorMsg("订单已撤销"); |
|
|
|
|
} |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 其他失败原因
|
|
|
|
|
if (!USER_PAYING.equals(wxOrder.getTradeState())) { |
|
|
|
|
return wxOrder; |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 撤销订单 |
|
|
|
|
* |
|
|
|
|