扫码盒子支付,在下单后可能已调用下单接口成功,但因网络原因,接口返回错误,为此抽离5次调用查询订单数据的逻辑进行复用。

debug
王绍全 3 days ago
parent 31bbdcbe38
commit c82b3d7beb
  1. 3
      src/main/java/com/ynxbd/common/TestA.java
  2. 4
      src/main/java/com/ynxbd/common/helper/xbd/EncHelper.java
  3. 6
      src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java
  4. 75
      src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java

@ -1,11 +1,8 @@
package com.ynxbd.common; package com.ynxbd.common;
import com.bocom.api.security.keygen.AESKeyGen;
public class TestA { public class TestA {
public static void main(String[] args) { public static void main(String[] args) {
} }
} }

@ -1,10 +1,6 @@
package com.ynxbd.common.helper.xbd; package com.ynxbd.common.helper.xbd;
import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;

File diff suppressed because one or more lines are too long

@ -349,9 +349,15 @@ public class WxPayHelper {
// micropay.setDetail("描述"); // 商品描述 // micropay.setDetail("描述"); // 商品描述
Order wxOrder;
MicropayResult micropayResult = PayMchAPI.payMicropay(micropay, mchKey); MicropayResult micropayResult = PayMchAPI.payMicropay(micropay, mchKey);
if (micropayResult == null) { if (micropayResult == null) {
order.setErrorMsg("【微信】盒子扫码支付请求失败"); log.warn("【微信】[盒子支付]下单异常 outTradeNo={}", outTradeNo);
wxOrder = waitMicoPay(outTradeNo); // 可能会出现支付成功,但是接口响应失败的情况
if (wxOrder != null) {
return wxOrder;
}
order.setErrorMsg("【微信】[盒子支付]调用下单接口异常");
return order; return order;
} }
@ -374,10 +380,46 @@ public class WxPayHelper {
return order; return order;
} }
Order wxOrder;
if (FAIL.equals(resultCode)) { // 失败 if (FAIL.equals(resultCode)) { // 失败
if (USER_PAYING.equals(errCode)) { // 密码支付 if (USER_PAYING.equals(errCode)) { // 密码支付
log.info("【微信】[盒子支付]密码支付 outTradeNo={}, msg={}", outTradeNo, errMsg); log.info("【微信】[盒子支付]密码支付 outTradeNo={}, msg={}", outTradeNo, errMsg);
wxOrder = waitMicoPay(outTradeNo);
if (wxOrder != null) {
return wxOrder;
}
} else {
order.setErrorCode(errCode);
order.setErrorMsg(errMsg);
log.info("【微信】[盒子支付]失败 outTradeNo={}, bankTransNo={}, errCode={}, errMsg={}", outTradeNo, bankTransNo, errCode, errMsg);
return order;
}
}
// 免密支付
Thread.sleep(2000); // 2s
wxOrder = queryOrder(outTradeNo);
// 长时间未支付
if (USER_PAYING.equals(wxOrder.getTradeState()) || PAY_ERROR.equals(wxOrder.getTradeState())) {
// 撤销订单
Order cancelOrder = cancelOrder(wxOrder.getOutTradeNo(), wxOrder.getBankTransNo());
// 撤销成功
if (cancelOrder.isSuccess()) {
wxOrder.setTradeState(REVOKED);
wxOrder.setErrorMsg("订单已撤销");
}
}
return wxOrder;
} catch (Exception e) {
log.info("【微信】[盒子支付]异常 {}", e.getMessage());
order.setErrorMsg("网络异常或当前不支持微信支付");
ErrorHelper.println(e);
}
return order;
}
// 等待扫码盒子支付
private static Order waitMicoPay(String outTradeNo) {
Order wxOrder;
for (int i = 1; i <= 5; i++) { for (int i = 1; i <= 5; i++) {
try { try {
Thread.sleep(5000 + ((i - 1) * 1500)); // 总共35s Thread.sleep(5000 + ((i - 1) * 1500)); // 总共35s
@ -410,34 +452,7 @@ public class WxPayHelper {
e.printStackTrace(); e.printStackTrace();
} }
} }
} else { return null;
order.setErrorCode(errCode);
order.setErrorMsg(errMsg);
log.info("【微信】[盒子支付]失败 outTradeNo={}, bankTransNo={}, errCode={}, errMsg={}", outTradeNo, bankTransNo, errCode, errMsg);
return order;
}
}
// 免密支付
Thread.sleep(2000); // 2s
wxOrder = queryOrder(outTradeNo);
// 长时间未支付
if (USER_PAYING.equals(wxOrder.getTradeState()) || PAY_ERROR.equals(wxOrder.getTradeState())) {
// 撤销订单
Order cancelOrder = cancelOrder(wxOrder.getOutTradeNo(), wxOrder.getBankTransNo());
// 撤销成功
if (cancelOrder.isSuccess()) {
wxOrder.setTradeState(REVOKED);
wxOrder.setErrorMsg("订单已撤销");
}
}
return wxOrder;
} catch (Exception e) {
log.info("【微信】[盒子支付]异常 {}", e.getMessage());
order.setErrorMsg("网络异常或当前不支持微信支付");
ErrorHelper.println(e);
}
return order;
} }
/** /**

Loading…
Cancel
Save