From 155f3f778ff133769593137738b246d6fde9271d Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 21:38:57 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#3570=20=E3=80=90=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E3=80=91=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1=E4=BA=91?= =?UTF-8?q?=E6=89=98=E7=AE=A1=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../miniapp/api/impl/BaseWxMaServiceImpl.java | 5 +- .../api/impl/WxMaServiceHttpClientImpl.java | 14 +++--- .../api/impl/WxMaServiceJoddHttpImpl.java | 13 +++--- .../api/impl/WxMaServiceOkHttpImpl.java | 13 +++--- .../wx/miniapp/config/WxMaConfig.java | 46 +++++++++++++++++++ .../config/impl/WxMaDefaultConfigImpl.java | 14 ++++++ 6 files changed, 82 insertions(+), 23 deletions(-) diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java index 0769eaae6..a5d479b65 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java @@ -427,8 +427,9 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH } String accessToken = getAccessToken(false); - if (StringUtils.isNotEmpty(this.getWxMaConfig().getApiHostUrl())) { - uri = uri.replace("https://api.weixin.qq.com", this.getWxMaConfig().getApiHostUrl()); + String effectiveApiHostUrl = this.getWxMaConfig().getEffectiveApiHostUrl(); + if (!WxMaConfig.DEFAULT_API_HOST_URL.equals(effectiveApiHostUrl)) { + uri = uri.replace(WxMaConfig.DEFAULT_API_HOST_URL, effectiveApiHostUrl); } String uriWithAccessToken = diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceHttpClientImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceHttpClientImpl.java index 9734e2593..73b499434 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceHttpClientImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceHttpClientImpl.java @@ -64,12 +64,10 @@ public class WxMaServiceHttpClientImpl extends BaseWxMaServiceImpl { @Override protected String doGetAccessTokenRequest() throws IOException { - String url = StringUtils.isNotEmpty(this.getWxMaConfig().getAccessTokenUrl()) ? - this.getWxMaConfig().getAccessTokenUrl() : StringUtils.isNotEmpty(this.getWxMaConfig().getApiHostUrl()) ? - WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", this.getWxMaConfig().getApiHostUrl()) : - WxMaService.GET_ACCESS_TOKEN_URL; - + this.getWxMaConfig().getAccessTokenUrl() : + WxMaService.GET_ACCESS_TOKEN_URL.replace( + WxMaConfig.DEFAULT_API_HOST_URL, this.getWxMaConfig().getEffectiveApiHostUrl()); url = String.format(url, this.getWxMaConfig().getAppid(), this.getWxMaConfig().getSecret()); @@ -84,9 +82,9 @@ public class WxMaServiceHttpClientImpl extends BaseWxMaServiceImpl { @Override protected String doGetStableAccessTokenRequest(boolean forceRefresh) throws IOException { String url = StringUtils.isNotEmpty(this.getWxMaConfig().getAccessTokenUrl()) ? - this.getWxMaConfig().getAccessTokenUrl() : StringUtils.isNotEmpty(this.getWxMaConfig().getApiHostUrl()) ? - GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", this.getWxMaConfig().getApiHostUrl()) : - GET_STABLE_ACCESS_TOKEN; + this.getWxMaConfig().getAccessTokenUrl() : + GET_STABLE_ACCESS_TOKEN.replace( + WxMaConfig.DEFAULT_API_HOST_URL, this.getWxMaConfig().getEffectiveApiHostUrl()); HttpPost httpPost = new HttpPost(url); if (this.getRequestHttpProxy() != null) { diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceJoddHttpImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceJoddHttpImpl.java index d23d865cf..94806121a 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceJoddHttpImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceJoddHttpImpl.java @@ -50,9 +50,9 @@ public class WxMaServiceJoddHttpImpl extends BaseWxMaServiceImpl微信云托管内网调用微信接口 + * @return 是否使用微信云托管模式 + */ + default boolean isUseWxCloudRun() { + return false; + } + + /** + * 设置是否使用微信云托管内网模式 + * 当部署在微信云托管环境时,api.weixin.qq.com 会被解析为内网地址,此时需要使用 HTTP 协议访问 + * 开启此配置后,SDK 会自动将 https://api.weixin.qq.com 替换为 http://api.weixin.qq.com + * + * @see 微信云托管内网调用微信接口 + * @param useWxCloudRun 是否使用微信云托管模式 + */ + default void setUseWxCloudRun(boolean useWxCloudRun) { + // 默认空实现 + } + + /** + * 根据配置获取实际应使用的 API 主机地址 + * 优先级:自定义 apiHostUrl > 微信云托管模式 > 默认 HTTPS 地址 + * + * @return 实际应使用的 API 主机地址 + */ + default String getEffectiveApiHostUrl() { + String apiHostUrl = getApiHostUrl(); + if (apiHostUrl != null && !apiHostUrl.isEmpty()) { + return apiHostUrl; + } + if (isUseWxCloudRun()) { + return CLOUD_RUN_API_HOST_URL; + } + return DEFAULT_API_HOST_URL; + } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java index ab82d6209..07dfaefcc 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java @@ -69,6 +69,10 @@ public class WxMaDefaultConfigImpl implements WxMaConfig { private String apiHostUrl; private String accessTokenUrl; + /** 是否使用微信云托管模式(使用 HTTP 协议访问内网地址) */ + @Getter(AccessLevel.NONE) + private boolean useWxCloudRun = false; + /** 自定义配置token的消费者 */ @Setter private Consumer updateAccessTokenBefore; @@ -388,6 +392,16 @@ public class WxMaDefaultConfigImpl implements WxMaConfig { this.accessTokenUrl = accessTokenUrl; } + @Override + public boolean isUseWxCloudRun() { + return this.useWxCloudRun; + } + + @Override + public void setUseWxCloudRun(boolean useWxCloudRun) { + this.useWxCloudRun = useWxCloudRun; + } + @Override public String getAppid() { return appid;