● relay 运行中

微信公众号发布中转服务

固定 IP 反向代理 — 把 /cgi-bin/* 请求转发给 api.weixin.qq.com,供多个公众号本地发布脚本共用。

这台服务是做什么的

本机发布公众号文章时,微信公众平台要求调用方 IP 在「IP 白名单」里,而本机公网 IP 会变。 这台服务提供一个固定 IP 的中转:本地脚本把请求发到这里,这里再原样转发给微信官方 API。 公众平台后台只需要把这台服务器的固定 IP 加入白名单,本地 IP 怎么变都不影响发布。

服务器本身不存储任何公众号的 AppID/AppSecret——那些始终只保存在各自本地项目的 .env 里; 服务器只按每个公众号自己的一个随机 key 做鉴权和转发,纯粹是无状态的字节流转发。

接入协议

把原本直接发给 https://api.weixin.qq.com/cgi-bin/... 的请求,只换 base URL、加一个 Authorization header,其余完全不变:

METHOD https://wechat-publish.ygg.com.cn/cgi-bin/<微信原始 path>?<微信原始 query>
Authorization: Bearer <该公众号的 key>

服务器自己拒绝时的返回

情况响应
path 不是 /cgi-bin/ 开头403
key 缺失或不认识403
连不上微信服务器502
健康检查GET /healthz200 ok(免鉴权)

新增一个公众号怎么接入

  1. 生成一个随机 key:node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
  2. SSH 到这台服务器,在 accounts.json 里新增一行 "<key>": "<账号名>",然后 sudo systemctl restart wechat-publish
  3. 本地该公众号项目的 .env 里配置:
    WECHAT_APPID=...
    WECHAT_APPSECRET=...
    WECHAT_PROXY_URL=https://wechat-publish.ygg.com.cn/cgi-bin
    WECHAT_PROXY_KEY=<第 1 步生成的 key>
  4. 如果本地发布脚本还没有 wx-client.js,复制一份现成的过去,用 createWxClient({ proxyUrl, proxyKey }) 发请求,不要再直接打 api.weixin.qq.com
  5. 这个公众号自己的微信公众平台后台加白名单(IP:见下方)——每个公众号要单独加。
  6. 跑一次发布脚本(不加 --publish,只建草稿)验证链路是否打通。

吊销 / 轮换

删掉 accounts.json 里对应的 key 那一行,systemctl restart wechat-publish 即可,不影响其他账号。


此页面由中转服务自身托管,内容即为接入的完整参考。