From 2a6993713aa4be9b8c9813e12735129a4c0e914e Mon Sep 17 00:00:00 2001 From: Liu Kai Date: Sat, 30 Jan 2016 12:21:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98JSSDK?= =?UTF-8?q?=E5=8F=8A=E9=80=80=E6=AC=BE=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为解决接口调用端无法取到调用微信服务器的返回结果的问题,微信支付JSSDK及退款接口增加了异常处理。 Change-Id: I2fe5255edb416336b64bef84a4bac5ba51231d67 Signed-off-by: Liu Kai --- .../me/chanjar/weixin/mp/api/WxMpService.java | 6 ++-- .../weixin/mp/api/WxMpServiceImpl.java | 33 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) 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 b28ce7757..af574c1bc 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 e9f6ee0a7..8aaae17b9 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;