From 2f54e3cf48c15c445aebfeee54dcafcdadb921c6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 03:56:54 +0000 Subject: [PATCH 1/3] Initial plan From edcf0f6cbca0dcf95a64de55d05d59d25b82661c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 04:06:45 +0000 Subject: [PATCH 2/3] =?UTF-8?q?feat(miniapp):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E4=BA=91=E6=89=98=E7=AE=A1=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=20HTTP=20=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E5=86=85=E7=BD=91=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../miniapp/api/impl/BaseWxMaServiceImpl.java | 2 ++ .../api/impl/WxMaServiceHttpClientImpl.java | 4 ++++ .../api/impl/WxMaServiceJoddHttpImpl.java | 4 ++++ .../api/impl/WxMaServiceOkHttpImpl.java | 4 ++++ .../wx/miniapp/config/WxMaConfig.java | 24 +++++++++++++++++++ .../config/impl/WxMaDefaultConfigImpl.java | 14 +++++++++++ 6 files changed, 52 insertions(+) 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 0769eaae67..eb7398e9ea 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 @@ -429,6 +429,8 @@ private R executeInternal( if (StringUtils.isNotEmpty(this.getWxMaConfig().getApiHostUrl())) { uri = uri.replace("https://api.weixin.qq.com", this.getWxMaConfig().getApiHostUrl()); + } else if (this.getWxMaConfig().isUseWxCloudRun()) { + uri = uri.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com"); } 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 9734e25933..e7b4e3ba0d 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 @@ -68,6 +68,8 @@ 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()) : + this.getWxMaConfig().isUseWxCloudRun() ? + WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : WxMaService.GET_ACCESS_TOKEN_URL; @@ -86,6 +88,8 @@ protected String doGetStableAccessTokenRequest(boolean forceRefresh) throws IOEx 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()) : + this.getWxMaConfig().isUseWxCloudRun() ? + GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : GET_STABLE_ACCESS_TOKEN; HttpPost httpPost = new HttpPost(url); 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 d23d865cf9..8734f2af68 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 @@ -52,6 +52,8 @@ 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()) : + this.getWxMaConfig().isUseWxCloudRun() ? + WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : WxMaService.GET_ACCESS_TOKEN_URL; url = String.format(url, this.getWxMaConfig().getAppid(), this.getWxMaConfig().getSecret()); @@ -71,6 +73,8 @@ protected String doGetStableAccessTokenRequest(boolean forceRefresh) throws IOEx 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()) : + this.getWxMaConfig().isUseWxCloudRun() ? + GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : GET_STABLE_ACCESS_TOKEN; WxMaStableAccessTokenRequest wxMaAccessTokenRequest = new WxMaStableAccessTokenRequest(); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java index 1053b809e9..cbce1ab9d1 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java @@ -67,6 +67,8 @@ 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()) : + this.getWxMaConfig().isUseWxCloudRun() ? + WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : WxMaService.GET_ACCESS_TOKEN_URL; url = String.format(url, this.getWxMaConfig().getAppid(), this.getWxMaConfig().getSecret()); @@ -81,6 +83,8 @@ protected String doGetStableAccessTokenRequest(boolean forceRefresh) throws IOEx 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()) : + this.getWxMaConfig().isUseWxCloudRun() ? + GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : GET_STABLE_ACCESS_TOKEN; WxMaStableAccessTokenRequest wxMaAccessTokenRequest = new WxMaStableAccessTokenRequest(); wxMaAccessTokenRequest.setAppid(this.getWxMaConfig().getAppid()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java index 59652ed0a9..db598c0d21 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java @@ -319,4 +319,28 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) {} /** 密钥对应的小程序 ID(普通小程序为 appId,托管第三方平台为 componentAppId) */ String getWechatMpAppid(); + + /** + * 是否使用微信云托管内网模式 + * 当部署在微信云托管环境时,api.weixin.qq.com 会被解析为内网地址,此时需要使用 HTTP 协议访问 + * 开启此配置后,SDK 会自动将 https://api.weixin.qq.com 替换为 http://api.weixin.qq.com + * + * @see 微信云托管内网调用微信接口 + * @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) { + // 默认空实现 + } } 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 ab82d6209e..07dfaefcc9 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 void setAccessTokenUrl(String accessTokenUrl) { 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; From bdda31f2b4e253752660c9d69fe25d050727cf50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 04:12:32 +0000 Subject: [PATCH 3/3] =?UTF-8?q?refactor(miniapp):=20=E9=87=8D=E6=9E=84=20A?= =?UTF-8?q?PI=20URL=20=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20getEffectiveApiHostUrl=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=87=8F=E5=B0=91=E4=BB=A3=E7=A0=81=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../miniapp/api/impl/BaseWxMaServiceImpl.java | 7 +++--- .../api/impl/WxMaServiceHttpClientImpl.java | 18 +++++---------- .../api/impl/WxMaServiceJoddHttpImpl.java | 17 +++++--------- .../api/impl/WxMaServiceOkHttpImpl.java | 17 ++++++-------- .../wx/miniapp/config/WxMaConfig.java | 22 +++++++++++++++++++ 5 files changed, 44 insertions(+), 37 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 eb7398e9ea..a5d479b65a 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,10 +427,9 @@ private R executeInternal( } String accessToken = getAccessToken(false); - if (StringUtils.isNotEmpty(this.getWxMaConfig().getApiHostUrl())) { - uri = uri.replace("https://api.weixin.qq.com", this.getWxMaConfig().getApiHostUrl()); - } else if (this.getWxMaConfig().isUseWxCloudRun()) { - uri = uri.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com"); + 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 e7b4e3ba0d..73b4994347 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,14 +64,10 @@ public HttpClientType getRequestType() { @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()) : - this.getWxMaConfig().isUseWxCloudRun() ? - WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : - 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()); @@ -86,11 +82,9 @@ protected String doGetAccessTokenRequest() throws IOException { @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()) : - this.getWxMaConfig().isUseWxCloudRun() ? - GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : - 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 8734f2af68..94806121ab 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,11 +50,9 @@ public HttpClientType getRequestType() { @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()) : - this.getWxMaConfig().isUseWxCloudRun() ? - WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : - 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()); HttpRequest request = HttpRequest.get(url); @@ -69,13 +67,10 @@ protected String doGetAccessTokenRequest() throws IOException { @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()) : - this.getWxMaConfig().isUseWxCloudRun() ? - GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : - GET_STABLE_ACCESS_TOKEN; + this.getWxMaConfig().getAccessTokenUrl() : + GET_STABLE_ACCESS_TOKEN.replace( + WxMaConfig.DEFAULT_API_HOST_URL, this.getWxMaConfig().getEffectiveApiHostUrl()); WxMaStableAccessTokenRequest wxMaAccessTokenRequest = new WxMaStableAccessTokenRequest(); wxMaAccessTokenRequest.setAppid(this.getWxMaConfig().getAppid()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java index cbce1ab9d1..8811028fee 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceOkHttpImpl.java @@ -65,11 +65,9 @@ public HttpClientType getRequestType() { @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()) : - this.getWxMaConfig().isUseWxCloudRun() ? - WxMaService.GET_ACCESS_TOKEN_URL.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : - 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()); Request request = new Request.Builder().url(url).get().build(); @@ -81,11 +79,10 @@ protected String doGetAccessTokenRequest() throws IOException { @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()) : - this.getWxMaConfig().isUseWxCloudRun() ? - GET_STABLE_ACCESS_TOKEN.replace("https://api.weixin.qq.com", "http://api.weixin.qq.com") : - GET_STABLE_ACCESS_TOKEN; + this.getWxMaConfig().getAccessTokenUrl() : + GET_STABLE_ACCESS_TOKEN.replace( + WxMaConfig.DEFAULT_API_HOST_URL, this.getWxMaConfig().getEffectiveApiHostUrl()); + WxMaStableAccessTokenRequest wxMaAccessTokenRequest = new WxMaStableAccessTokenRequest(); wxMaAccessTokenRequest.setAppid(this.getWxMaConfig().getAppid()); wxMaAccessTokenRequest.setSecret(this.getWxMaConfig().getSecret()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java index db598c0d21..8164d48346 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java @@ -320,6 +320,11 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) {} /** 密钥对应的小程序 ID(普通小程序为 appId,托管第三方平台为 componentAppId) */ String getWechatMpAppid(); + /** 微信 API 默认主机地址 */ + String DEFAULT_API_HOST_URL = "https://api.weixin.qq.com"; + /** 微信云托管使用的 HTTP 协议主机地址 */ + String CLOUD_RUN_API_HOST_URL = "http://api.weixin.qq.com"; + /** * 是否使用微信云托管内网模式 * 当部署在微信云托管环境时,api.weixin.qq.com 会被解析为内网地址,此时需要使用 HTTP 协议访问 @@ -343,4 +348,21 @@ default boolean isUseWxCloudRun() { 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; + } }