Install
openclaw skills install @zhangifonly/weixin微信公众号/小程序 API 工具与实战避坑手册。Use for: (1) 用附带的零依赖 CLI 直接调公众号 API——取 token、传素材、建草稿、发布文章,(2) 排查 40164/45009 等真实高频错误,(3) 公众号接入/OAuth/JSSDK/支付 V3 开发指导。WeChat Official Account API CLI (zero-dependency) plus a battle-tested pitfall guide for token, media, draft and publishing workflows.
openclaw skills install @zhangifonly/weixin不止讲"微信开发是什么"——本 skill 附带一个零依赖命令行工具
(scripts/wxoa.py,仅 Python 标准库),让 agent 直接替用户完成
公众号内容发布全链路:取 token → 传封面 → 建草稿 → 发布 → 查发表记录。
另附一份真实生产环境踩坑清单(每一条都来自实际运营公众号的事故复盘)。
export WX_APPID=wx开头的AppID
export WX_SECRET=公众号AppSecret
python3 scripts/wxoa.py token # 验证凭证
python3 scripts/wxoa.py call /cgi-bin/get_api_domain_ip # 冒烟测试
脚本行为声明:仅请求 api.weixin.qq.com;本地只写一个 token 缓存文件
(系统临时目录,7000 秒过期),不读写其他文件。
| 命令 | 作用 |
|---|---|
token | 取 access_token(本地缓存,避免重复刷新挤掉线上服务的 token) |
call <path> [json] | 通用调用:任何官方接口,无 body 为 GET,有 body 为 POST |
upload-image <file> | 上传正文内图片(uploadimg,返回 url,不占素材库) |
upload-thumb <file> | 上传永久图片素材(返回 media_id,作草稿封面) |
draft-add <标题> <html文件> <thumb_media_id> [作者] [摘要] | 新建图文草稿 |
drafts [offset] [count] | 列草稿箱 |
publish <media_id> | 发布草稿(freepublish/submit) |
published [offset] [count] | 列已发表记录 |
python3 scripts/wxoa.py upload-thumb cover.jpg
# → {"media_id": "MEDIA_ID", "url": "..."}
python3 scripts/wxoa.py draft-add "文章标题" article.html MEDIA_ID "作者名" "摘要"
# → {"media_id": "DRAFT_MEDIA_ID"}
python3 scripts/wxoa.py publish DRAFT_MEDIA_ID
# → {"publish_id": "..."}(异步,稍后用 published 查结果)
call 兜底示例(脚本未封装的接口都能调):
python3 scripts/wxoa.py call /cgi-bin/menu/get
python3 scripts/wxoa.py call /cgi-bin/user/get
python3 scripts/wxoa.py call /cgi-bin/message/template/send '{"touser":"OPENID","template_id":"...","data":{}}'
# GET 回调: sha1(sorted([token, timestamp, nonce])) == signature 则原样返回 echostr
tmp = ''.join(sorted([token, timestamp, nonce]))
ok = hashlib.sha1(tmp.encode()).hexdigest() == signature
open.weixin.qq.com/connect/oauth2/authorize(scope=snsapi_base
静默拿 openid / snsapi_userinfo 弹窗拿资料)/sns/oauth2/access_token/sns/userinfo(此 token 与全局 access_token 是两回事)wx.login() 取 code → 服务端 /sns/jscode2session 换 openid+session_key
→ 生成自定义登录态。session_key 绝不下发前端。
sha1("jsapi_ticket=T&noncestr=N×tamp=TS&url=U"),url 取 # 前部分。
jsapi_ticket 用全局 access_token 换取,同样需要中心化缓存。
api.mch.weixin.qq.com,JSON + SHA256withRSA 商户私钥签名| 用途 | 域名 |
|---|---|
| 公众号/小程序 API | api.weixin.qq.com |
| 微信支付 | api.mch.weixin.qq.com |
| 网页授权入口 | open.weixin.qq.com |
| 企业微信 | qyapi.weixin.qq.com |
wework skill