From 22cfe81958b314c9dcdd8cb089840b2352a637ee Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Sat, 27 Sep 2025 19:35:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=85=B3=E9=94=AE=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E5=90=8C=E6=AD=A5=E9=9C=80=E8=A6=81=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E6=89=8D=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ShopStoreBaseServiceImpl.java | 23 ++++-- .../controller/WxOrderShippingController.java | 23 ++++++ .../service/WxOrderShippingService.java | 7 ++ .../impl/WxOrderShippingServiceImpl.java | 70 ++++++++++++++++++- 4 files changed, 113 insertions(+), 10 deletions(-) diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java index 6250405a..08b8836f 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java @@ -3199,18 +3199,27 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl result = wxOrderShippingService.updateOrderDetailPath(params.getStr("path")); + if (!result.getFirst()) { + throw new ApiException(result.getSecond()); + } + return CommonResult.success(); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java index 76db7a99..8f996fe5 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java @@ -30,4 +30,11 @@ public interface WxOrderShippingService { * @return 返回确认收货结果,包含成功状态和错误消息 */ Pair notifyConfirmReceive(String orderId); + + + /** + * 配置订单详情路径 + * 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order_center/order_center.html + */ + Pair updateOrderDetailPath(String orderId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java index 4c3e2369..72fe8e24 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java @@ -33,22 +33,23 @@ import org.springframework.web.client.HttpClientErrorException; import java.util.Date; +/** + * 对接微信订单管理相关接口 + */ @Slf4j @Service public class WxOrderShippingServiceImpl implements WxOrderShippingService { + private final String ORDER_DETAIL_PATH = "https://api.weixin.qq.com/wxa/business/shipping"; @Lazy @Autowired private WxUtil wxUtil; - @Lazy @Autowired private ShopOrderBaseService shopOrderBaseService; - @Lazy @Autowired private ShopStoreSfOrderService shopStoreSfOrderService; - @Lazy @Autowired private ShopOrderLogisticsService shopOrderLogisticsService; @@ -241,4 +242,67 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService { return Pair.of(false, "通知微信确认收货失败: " + e.getMessage()); } } + + /** + * 配置订单详情路径 + * 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order_center/order_center.html + * + * @param path 订单详情页面路径 + * @return 配置结果,包含成功状态和错误消息 + */ + @Override + public Pair updateOrderDetailPath(String path) { + log.debug("开始配置订单详情路径,路径: {}", path); + if (StrUtil.isBlank(path)) { + log.warn("订单详情路径为空,默认:{}", ORDER_DETAIL_PATH); +// return Pair.of(false, "详情路径 path 不能为空"); + path = ORDER_DETAIL_PATH; + } + + try { + // 获取微信访问令牌 + String accessToken = wxUtil.getAccessToken(); + if (StrUtil.isBlank(accessToken)) { + log.error("获取AccessToken失败"); + return Pair.of(false, "获取AccessToken失败"); + } + + // 构造请求参数 + JSONObject paramsJSON = new JSONObject() + .set("path", String.format("%s?on=${商品订单号}", path)); + + // 构造请求URL + String postUrl = "https://api.weixin.qq.com/wxa/sec/order/update_order_detail_path?access_token=" + accessToken; + log.debug("配置订单详情路径请求: {} \n {}", postUrl, paramsJSON); + + // 发送请求到微信API + JSONObject respObj = RestTemplateHttpUtil.sendPost( + postUrl, + null, paramsJSON, JSONObject.class + ); + + // 处理响应结果 + if (respObj == null) { + log.error("配置订单详情路径失败,返回结果为空"); + return Pair.of(false, "配置订单详情路径失败,返回结果为空"); + } + + int errCode = respObj.getInt("errcode", -1); + if (errCode != 0) { + String errorMsg = respObj.getStr("errmsg", "未知错误"); + log.error("配置订单详情路径失败,错误码: {}, 错误信息: {}", errCode, errorMsg); + return Pair.of(false, "配置订单详情路径失败: " + errorMsg); + } + + log.info("配置订单详情路径成功,路径: {}", path); + return Pair.of(true, "配置订单详情路径成功"); + + } catch (HttpClientErrorException e) { + log.error("HTTP请求错误,状态码: {}, 错误信息: {}", e.getStatusCode(), e.getMessage(), e); + return Pair.of(false, "HTTP请求错误: " + e.getMessage()); + } catch (Exception e) { + log.error("配置订单详情路径失败,错误信息: {}", e.getMessage(), e); + return Pair.of(false, "配置订单详情路径失败: " + e.getMessage()); + } + } }