固定 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>
/cgi-bin/ 开头 —— 微信官方接口本来就是这个前缀(/cgi-bin/token、/cgi-bin/draft/add 等),原样接上去即可。Content-Type 等)、body 原样透传,服务器不解析 —— JSON 正常发 application/json,上传图片正常发 multipart/form-data。errcode 判断逻辑完全不用变。| 情况 | 响应 |
|---|---|
path 不是 /cgi-bin/ 开头 | 403 |
| key 缺失或不认识 | 403 |
| 连不上微信服务器 | 502 |
| 健康检查 | GET /healthz → 200 ok(免鉴权) |
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"accounts.json 里新增一行 "<key>": "<账号名>",然后 sudo systemctl restart wechat-publish。.env 里配置:
WECHAT_APPID=...
WECHAT_APPSECRET=...
WECHAT_PROXY_URL=https://wechat-publish.ygg.com.cn/cgi-bin
WECHAT_PROXY_KEY=<第 1 步生成的 key>
wx-client.js,复制一份现成的过去,用 createWxClient({ proxyUrl, proxyKey }) 发请求,不要再直接打 api.weixin.qq.com。--publish,只建草稿)验证链路是否打通。删掉 accounts.json 里对应的 key 那一行,systemctl restart wechat-publish 即可,不影响其他账号。
此页面由中转服务自身托管,内容即为接入的完整参考。