From 6e343ab42ec711b5d65ceb03fc0ebed5045e2cef Mon Sep 17 00:00:00 2001 From: songmingsong <2929511417@qq.com> Date: Fri, 6 Dec 2024 13:56:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=AE=A2=E5=8D=95=E5=85=B3?= =?UTF-8?q?=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/mobile/AppWxPayController.java | 8 ++- .../service/impl/mobile/WxPayServiceImpl.java | 56 +++++++++++++------ .../basic/service/mobile/WxPayService.java | 7 +++ 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppWxPayController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppWxPayController.java index 72227f5..5a8b1b2 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppWxPayController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppWxPayController.java @@ -66,5 +66,11 @@ public class AppWxPayController { BizCodeEnum.ADVANCE_PAYMENT_CALLBACK_REFUND_FAILED); } - + @ApiOperation(value = "微信关闭订单", notes = "微信关闭订单") + @PostMapping("/closeOrder") + @IgnoreToken + public ApiResponse closeOrder(@RequestBody String orderId) { + wxPayService.closeOrder(orderId); + return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK); + } } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java index 9160b6a..c0aece6 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java @@ -76,14 +76,7 @@ public class WxPayServiceImpl implements WxPayService { public WxPayRespVO createOrder(WXPayOrderReqVO req) { try { // 使用自动更新平台证书的RSA配置 - // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错 - Config config = - new RSAAutoCertificateConfig.Builder() - .merchantId(wechatConfig.getMchId()) - .privateKeyFromPath(wechatConfig.getKeyPath()) - .merchantSerialNumber(wechatConfig.getMchSerialNo()) - .apiV3Key(wechatConfig.getApiV3()) - .build(); + Config config = getInstance(wechatConfig); // 构建service JsapiService service = new JsapiService.Builder().config(config).build(); @@ -184,14 +177,7 @@ public class WxPayServiceImpl implements WxPayService { QueryOrderByOutTradeNoRequest queryRequest = new QueryOrderByOutTradeNoRequest(); queryRequest.setMchid(wechatConfig.getMchId()); queryRequest.setOutTradeNo(orderId.toString()); - // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错 - Config config = - new RSAAutoCertificateConfig.Builder() - .merchantId(wechatConfig.getMchId()) - .privateKeyFromPath(wechatConfig.getKeyPath()) - .merchantSerialNumber(wechatConfig.getMchSerialNo()) - .apiV3Key(wechatConfig.getApiV3()) - .build(); + Config config = getInstance(wechatConfig); // 构建service JsapiService service = new JsapiService.Builder().config(config).build(); try { @@ -275,6 +261,17 @@ public class WxPayServiceImpl implements WxPayService { } } + @Override + public void closeOrder(String orderId) { + CloseOrderRequest closeOrderRequest = new CloseOrderRequest(); + closeOrderRequest.setOutTradeNo(orderId); + closeOrderRequest.setMchid(wechatConfig.getMchId()); + Config config = getInstance(wechatConfig); + // 构建service + JsapiService service = new JsapiService.Builder().config(config).build(); + service.closeOrder(closeOrderRequest); + } + /** * 退款回调 解密数据 @@ -368,4 +365,31 @@ public class WxPayServiceImpl implements WxPayService { return REFUNDS_SCHEMA + token; } + + /** + * 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错 + */ + private static class Holder { + private static volatile Config instance; + + static void init(WechatConfig wechatConfig) { + instance = new RSAAutoCertificateConfig.Builder() + .merchantId(wechatConfig.getMchId()) + .privateKeyFromPath(wechatConfig.getKeyPath()) + .merchantSerialNumber(wechatConfig.getMchSerialNo()) + .apiV3Key(wechatConfig.getApiV3()) + .build(); + } + } + + public static Config getInstance(WechatConfig wechatConfig) { + if (Holder.instance == null) { + synchronized (Holder.class) { + if (Holder.instance == null) { + Holder.init(wechatConfig); + } + } + } + return Holder.instance; + } } diff --git a/src/main/java/com/ycwl/basic/service/mobile/WxPayService.java b/src/main/java/com/ycwl/basic/service/mobile/WxPayService.java index 1f24914..8c137fa 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/WxPayService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/WxPayService.java @@ -38,4 +38,11 @@ public interface WxPayService { * 微信退款回调 */ boolean refundNotify(String refundResult) throws IOException, GeneralSecurityException; + + /** + * 关闭订单 + * + * @param orderId 订单id(订单编号) + */ + void closeOrder(String orderId) ; }