公众号草稿发布服务
July 8, 2026 · View on GitHub
给 md-to-wechat.html 加一个「发布到草稿」按钮:本地起一个小服务,点按钮就把排好版的文章推送到公众号草稿箱(不直接群发,安全)。
零依赖,只要 Node ≥ 18。
前提条件(重要,先确认)
- 普通订阅号即可,个人号、未认证的号也能调
draft/add草稿接口——在「设置与开发 → 基本配置」拿到 AppID / AppSecret 即可。 - IP 白名单(真正必须做的一步):调用微信接口的机器出口 IP 必须加进公众号后台
「设置与开发 → 基本配置 → IP 白名单」。本地运行就填你当前网络的公网出口 IP
(搜「我的 IP」即可查到)。没加会报错
40164。
使用
cd tools/server
cp .env.example .env # 然后编辑 .env,填 AppID / AppSecret / 封面
npm start # 或:node publish-wechat.mjs
启动后:
- 服务地址:
http://127.0.0.1:3007/ - 通过本地服务打开工具:
http://127.0.0.1:3007/md-to-wechat.html(这样点「发布到草稿」是同源请求,不会有跨域 / 混合内容问题。用file://或线上 Pages 打开时按钮会提示你先走本地服务。)
在工具里粘好 Markdown、选好风格 → 点 发布到草稿 → 去公众号后台草稿箱查看。
.env 配置项
| 变量 | 必填 | 说明 |
|---|---|---|
WECHAT_APPID | ✅ | 开发者 ID |
WECHAT_APPSECRET | ✅ | 开发者密码 |
WECHAT_THUMB_MEDIA_ID | 二选一 | 已上传的永久素材 media_id,作封面 |
WECHAT_DEFAULT_COVER | 二选一 | 本地封面图路径(相对 server/ 或绝对);首次自动上传并缓存 media_id |
WECHAT_AUTHOR | 可选 | 默认作者名(≤8 字) |
PORT | 可选 | 默认 3007 |
封面是
draft/add的必填项。两个封面变量都不填时,服务会用正文里的第一张图当封面;正文也没图就报错。
工作流程
- 用 AppID/Secret 换
access_token(自动缓存,2 小时内复用)。 - 把正文里的
data:/外链图片逐张上传到微信,替换成微信域名 URL(否则微信会丢图)。 - 解析封面
thumb_media_id。 - 调
draft/add建草稿,返回media_id。
常见报错
| errcode | 含义 / 处理 |
|---|---|
| 40164 | 出口 IP 不在白名单 → 去后台加 IP |
| 40001 / 40013 | AppSecret / AppID 不对 |
| 48001 | 接口未授权 → 去后台「接口权限」确认草稿箱/发布接口可用 |
| 45009 | 触发频率限制,稍后再试 |
安全
.env、.cache.json已在.gitignore中,不会提交。- 服务只监听
127.0.0.1(仅本机可访问)。 - 只建草稿,不群发,误点也不会推送给粉丝。