SDK 针对微信 正向代理和反向代理支持 - binarywang/WxJava GitHub Wiki

反向代理支持(推荐)

在内网部署情况下,需要通过堡垒机对外网地址进行配置,此时需要更改 SDK 中对应的微信地址为堡垒机代理地址时使用。

反向代理和正向代理只能配置一项

当前反向代理配置在v4.7.7.B版本以上支持(不含v4.7.7.B版本)

  # 单实例配置示例(其他字段省略)
  wx:
    mp:
      hosts:
        api-host: http://proxy.company.com:8080
        mp-host: http://mp-proxy.company.com:8080

    miniapp:
      api-host-url: http://proxy.company.com:8080/weixin
      access-token-url: http://token-service.company.com/miniapp/token (统一token 管理使用,非必要不配置)

    pay:
      api-host-url: http://pay-proxy.company.com:8080/weixinpay

    cp:
      base-api-url: http://cp-proxy.company.com:8080

    channel:
      api-host-url: http://proxy.company.com:8080
      access-token-url: http://token-service.company.com/channel/token

    open:
      api-host-url: http://proxy.company.com:8080
      access-token-url: http://token-service.company.com/open/token

  # 多实例配置示例
  wx:
    miniapp:
      apps:
        tenant1:
          api-host-url: http://tenant1-proxy.company.com:8080
          access-token-url: http://token-service.company.com/tenant1/token

注意事项: api-host-url 原则上不建议使用内网域名或 https 方式(推荐 http://ip:端口 )进行配置,如有必要请在内网部署解决dns 解析服务器和自签证书问题,最简单的为配置/etc/hosts

小程序和微信支付配置示例

wx:
  miniapp:
    #.... 此处省略展示
    msgDataFormat: JSON
    api-host-url: http://10.10.10.10:9401/weixin  # 新增微信小程序地址反向代理地址,移除 proxy 等配置
  pay:
    #.... 此处省略展示
    notify-url: https://you.domain.com/api/order/notify  # 域名为后端服务器(外网https域名)地址,需要堡垒机映射到对应服务上
    api-host-url: http://10.10.10.10:9402/weixinpay #微信支付API地址反向代理地址

OpenResty 配置参考

# 微信小程序反向代理配置(http://10.10.10.10:9401/weixin)
location ^~ /weixin/ {
    proxy_pass https://api.weixin.qq.com/; 
    proxy_set_header Host api.weixin.qq.com; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header X-Forwarded-Port $server_port; 
    proxy_http_version 1.1; 
    add_header X-Cache $upstream_cache_status; 
    proxy_ssl_server_name off; 
    proxy_ssl_name $proxy_host; 
    add_header Cache-Control no-cache; 
}

# 微信支付反向代理配置(http://10.10.10.10:9402/weixinpay)
location ^~ /weixinpay {
    proxy_pass https://api.mch.weixin.qq.com/; 
    proxy_set_header Host api.mch.weixin.qq.com/; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header X-Forwarded-Port $server_port; 
    proxy_http_version 1.1; 
    add_header X-Cache $upstream_cache_status; 
    add_header Cache-Control no-cache; 
    proxy_ssl_server_name off; 
    proxy_ssl_name $proxy_host; 
}

WxJava 各模块 URL 字段配置表

模块 核心字段 Starter字段 默认值 说明
MP apiHost hosts.apiHost https://api.weixin.qq.com 公众号 API 域名
MP mpHost hosts.mpHost https://mp.weixin.qq.com 公众号管理域名
MP openHost hosts.openHost https://open.weixin.qq.com 开放平台域名
Miniapp apiHostUrl apiHostUrl https://api.weixin.qq.com 小程序 API 域名
Miniapp accessTokenUrl accessTokenUrl - 自定义 Token 获取地址
Pay apiHostUrl (统一) apiHostUrl (统一) https://api.mch.weixin.qq.com 支付 API 域名 (已统一)
Pay notifyUrl (新增) notifyUrl (新增) - 支付异步回调地址 (新增)
Pay payScoreNotifyUrl payScoreNotifyUrl - 支付分回调地址
Pay payScorePermissionNotifyUrl (新增) payScorePermissionNotifyUrl (新增) - 支付分授权回调地址 (新增)
CP baseApiUrl baseApiUrl https://qyapi.weixin.qq.com 企业微信 API 域名
Channel apiHostUrl apiHostUrl https://api.weixin.qq.com 视频号 API 域名
Channel accessTokenUrl accessTokenUrl - 自定义 Token 获取地址
Open apiHostUrl apiHostUrl https://api.weixin.qq.com 开放平台 API 域名
Open accessTokenUrl accessTokenUrl - 自定义 Token 获取地址
Qidian apiHost (MP) hosts.apiHost https://api.weixin.qq.com 企点 API 域名
Qidian openHost hosts.openHost https://open.weixin.qq.com 企点开放平台域名
Qidian qidianHost hosts.qidianHost https://api.qidian.qq.com 企点专用 API 域名

###多实例 Starter 支持

模块 核心字段 单实例字段 多实例字段 配置路径
MP apiHost hosts.apiHost hosts.apiHost (全局) wx.mp.hosts.*
MP mpHost hosts.mpHost hosts.mpHost (全局) wx.mp.hosts.*
MP openHost hosts.openHost hosts.openHost (全局) wx.mp.hosts.*
Miniapp apiHostUrl apiHostUrl apps.{tenant}.apiHostUrl wx.ma.apps.*
Miniapp accessTokenUrl accessTokenUrl apps.{tenant}.accessTokenUrl wx.ma.apps.*
Pay apiHostUrl apiHostUrl 无多实例 wx.pay
Pay notifyUrl notifyUrl 无多实例 wx.pay
Pay payScoreNotifyUrl payScoreNotifyUrl 无多实例 wx.pay
Pay payScorePermissionNotifyUrl payScorePermissionNotifyUrl 无多实例 wx.pay
CP baseApiUrl baseApiUrl apps.{tenant}.baseApiUrl wx.cp.apps.*
Channel apiHostUrl apiHostUrl apps.{tenant}.apiHostUrl wx.channel.apps.*
Channel accessTokenUrl accessTokenUrl apps.{tenant}.accessTokenUrl wx.channel.apps.*
Open apiHostUrl apiHostUrl 无多实例 wx.open
Open accessTokenUrl accessTokenUrl 无多实例 wx.open
Qidian apiHost hosts.apiHost 无多实例 wx.qidian
Qidian openHost hosts.openHost 无多实例 wx.qidian
Qidian qidianHost hosts.qidianHost 无多实例 wx.qidian

正向代理

在某些环境下,应用程序必须通过代理才能够访问微信接口,比如阿里的ACE(ACE线上环境不能直接访问外网。 HTTP请求需要通过使用代理: http://ace.aliapp.com/java/quick-start.md?spm=5176.383729.9.2.6HqPoT&file=quick-start.md)。

你可以在构造自己的WxCpConfigStorage的时候设置http代理信息:

  1. http_proxy_host
  2. http_proxy_port
  3. http_proxy_username(可选)
  4. http_proxy_password(可选)

只要你设置了http代理,那么所有的请求都会从代理走。