From 61ac241b4b98502388f4ffaf54e687f9d10f47a7 Mon Sep 17 00:00:00 2001 From: xiaoyu <17601026937@163.com> Date: Fri, 18 Jun 2021 17:25:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1V3=E6=8E=A5=E5=8F=A3=E9=80=80?= =?UTF-8?q?=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/channel/wxpay/WxpayRefundService.java | 21 ++++++++++++------- .../pay/channel/wxpay/kits/WxpayV3Util.java | 6 ++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayRefundService.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayRefundService.java index e583d2d..60cdede 100644 --- a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayRefundService.java +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayRefundService.java @@ -95,19 +95,13 @@ public class WxpayRefundService extends AbstractRefundService { amountJson.put("refund", refundOrder.getRefundAmount());// 退款金额 amountJson.put("total", payOrder.getAmount());// 订单总金额 amountJson.put("currency", "CNY");// 币种 - reqJSON.put("amount", amountJson.toJSONString()); + reqJSON.put("amount", amountJson); WxPayService wxPayService = mchAppConfigContext.getWxServiceWrapper().getWxPayService(); setCretPath(mchAppConfigContext, wxPayService); // 证书路径 if(mchAppConfigContext.isIsvsubMch()){ // 特约商户 WxpayIsvsubMchParams isvsubMchParams = mchAppConfigContext.getIsvsubMchParamsByIfCode(getIfCode(), WxpayIsvsubMchParams.class); - reqJSON.put("sp_appid", wxPayService.getConfig().getAppId()); - reqJSON.put("sp_mchid", wxPayService.getConfig().getMchId()); reqJSON.put("sub_mchid", isvsubMchParams.getSubMchId()); - reqJSON.put("sub_appid", isvsubMchParams.getSubMchAppId()); - }else { // 普通商户 - reqJSON.put("appid", wxPayService.getConfig().getAppId()); - reqJSON.put("mchid", wxPayService.getConfig().getMchId()); } JSONObject resultJSON = WxpayV3Util.refundV3(reqJSON, mchAppConfigContext.getWxServiceWrapper().getWxPayService().getConfig()); @@ -116,6 +110,10 @@ public class WxpayRefundService extends AbstractRefundService { String refundId = resultJSON.getString("refund_id"); channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_SUCCESS); channelRetMsg.setChannelOrderId(refundId); + }else if ("PROCESSING".equals(status)){ // 退款处理中 + String refundId = resultJSON.getString("refund_id"); + channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.WAITING); + channelRetMsg.setChannelOrderId(refundId); }else{ channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL); channelRetMsg.setChannelErrMsg(status); @@ -157,7 +155,14 @@ public class WxpayRefundService extends AbstractRefundService { }else if (CS.PAY_IF_VERSION.WX_V3.equals(mchAppConfigContext.getWxServiceWrapper().getApiVersion())) { //V3 WxPayService wxPayService = mchAppConfigContext.getWxServiceWrapper().getWxPayService(); setCretPath(mchAppConfigContext, wxPayService); // 证书路径 - JSONObject resultJSON = WxpayV3Util.refundQueryV3(refundOrder.getRefundOrderId(), wxPayService.getConfig()); + JSONObject resultJSON = null; + if (mchAppConfigContext.isIsvsubMch()) { + WxpayIsvsubMchParams isvsubMchParams = mchAppConfigContext.getIsvsubMchParamsByIfCode(getIfCode(), WxpayIsvsubMchParams.class); + wxPayService.getConfig().setSubMchId(isvsubMchParams.getSubMchId()); + resultJSON = WxpayV3Util.refundQueryV3Isv(refundOrder.getRefundOrderId(), wxPayService.getConfig()); + }else { + resultJSON = WxpayV3Util.refundQueryV3(refundOrder.getRefundOrderId(), wxPayService.getConfig()); + } String status = resultJSON.getString("status"); if("SUCCESS".equals(status)){ // 退款成功 channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_SUCCESS); diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/kits/WxpayV3Util.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/kits/WxpayV3Util.java index 4e5a448..10b2cc7 100644 --- a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/kits/WxpayV3Util.java +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/kits/WxpayV3Util.java @@ -94,6 +94,12 @@ public class WxpayV3Util { return JSON.parseObject(response); } + public static JSONObject refundQueryV3Isv(String refundOrderId, WxPayConfig wxPayConfig) throws WxPayException { + String url = String.format("%s/v3/refund/domestic/refunds/%s?sub_mchid=%s", PAY_BASE_URL, refundOrderId, wxPayConfig.getSubMchId()); + String response = getV3(url, wxPayConfig); + return JSON.parseObject(response); + } + public static String postV3(String url, String requestStr, WxPayConfig wxPayConfig) throws WxPayException { CloseableHttpClient httpClient = createApiV3HttpClient(wxPayConfig); HttpPost httpPost = createHttpPost(url, requestStr); -- GitLab