diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java index b28ce775..af574c1b 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java @@ -726,8 +726,9 @@ public interface WxMpService { * @param parameters * the required or optional parameters * @return + * @throws WxErrorException */ - Map getJSSDKPayInfo(Map parameters); + Map getJSSDKPayInfo(Map parameters) throws WxErrorException; /** * 该接口调用“统一下单”接口,并拼装JSSDK发起支付请求需要的参数 @@ -740,10 +741,11 @@ public interface WxMpService { * @param ip 发起支付的客户端IP * @param notifyUrl 通知地址 * @return + * @throws WxErrorException * @deprecated Use me.chanjar.weixin.mp.api.WxMpService.getJSSDKPayInfo(Map) instead */ @Deprecated - Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl); + Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl) throws WxErrorException; /** * 该接口提供所有微信支付订单的查询,当支付通知处理异常戒丢失的情冴,商户可以通过该接口查询订单支付状态。 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java index e9f6ee0a..8aaae17b 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java @@ -883,7 +883,8 @@ public class WxMpServiceImpl implements WxMpService { } @Override - public Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) { + public Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) + throws WxErrorException { Map packageParams = new HashMap(); packageParams.put("appid", wxMpConfigStorage.getAppId()); packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); @@ -899,8 +900,21 @@ public class WxMpServiceImpl implements WxMpService { } @Override - public Map getJSSDKPayInfo(Map parameters) { + public Map getJSSDKPayInfo(Map parameters) throws WxErrorException { WxMpPrepayIdResult wxMpPrepayIdResult = getPrepayId(parameters); + + if (!"SUCCESS".equalsIgnoreCase(wxMpPrepayIdResult.getReturn_code()) + ||!"SUCCESS".equalsIgnoreCase(wxMpPrepayIdResult.getResult_code())) { + WxError error = new WxError(); + error.setErrorCode(-1); + error.setErrorMsg("return_code:" + wxMpPrepayIdResult.getReturn_code() + + "return_msg:" + wxMpPrepayIdResult.getReturn_msg() + + "result_code:" + wxMpPrepayIdResult.getResult_code() + + "err_code" + wxMpPrepayIdResult.getErr_code() + + "err_code_des" + wxMpPrepayIdResult.getErr_code_des()); + throw new WxErrorException(error); + } + String prepayId = wxMpPrepayIdResult.getPrepay_id(); if (prepayId == null || prepayId.equals("")) { throw new RuntimeException(String.format("Failed to get prepay id due to error code '%s'(%s).", wxMpPrepayIdResult.getErr_code(), wxMpPrepayIdResult.getErr_code_des())); @@ -1004,11 +1018,16 @@ public class WxMpServiceImpl implements WxMpService { xstream.processAnnotations(WxRedpackResult.class); WxMpPayRefundResult wxMpPayRefundResult = (WxMpPayRefundResult) xstream.fromXML(responseContent); - if ("FAIL".equals(wxMpPayRefundResult.getResultCode())) { - WxError error = new WxError(); - error.setErrorCode(-1); - error.setErrorMsg(wxMpPayRefundResult.getErrCodeDes()); - throw new WxErrorException(error); + if (!"SUCCESS".equalsIgnoreCase(wxMpPayRefundResult.getResultCode()) + ||!"SUCCESS".equalsIgnoreCase(wxMpPayRefundResult.getReturnCode())) { + WxError error = new WxError(); + error.setErrorCode(-1); + error.setErrorMsg("return_code:" + wxMpPayRefundResult.getReturnCode() + + "return_msg:" + wxMpPayRefundResult.getReturnMsg() + + "result_code:" + wxMpPayRefundResult.getResultCode() + + "err_code" + wxMpPayRefundResult.getErrCode() + + "err_code_des" + wxMpPayRefundResult.getErrCodeDes()); + throw new WxErrorException(error); } return wxMpPayRefundResult;