微信公众平台 Skill
覆盖公众号运营与开发最常接的业务:access_token 获取与稳定版接口、关注者列表与标签黑名单、被动回复与客服消息、模板消息与订阅通知的选型、自定义菜单、网页授权登录、服务器配置与消息加解密、全局错误码与调用限额。重点讲清模板消息/订阅通知/一次性订阅消息三套并存机制的区别,以及 snsapi_base 与 snsapi_userinfo 两种网页授权 scope 的精确差异。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill wechat-mp --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill wechat-mp --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill wechat-mp --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/wechat-mp/prompt.md 并照它执行装对了的标志:references/ 下有 8 份文档。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
8 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
鉴权
access_token 获取、稳定版接口、IP 白名单查询、回调连通性检测
错误码与限流
全局错误码、调用配额查询与清零、接口报警与自动屏蔽
服务器配置与消息加解密
接入校验、明文/兼容/安全三种模式、AES-256-CBC 签名与加解密流程
自定义菜单
创建、查询、删除自定义菜单与个性化菜单,菜单点击事件
消息与客服消息
被动回复的 5 秒机制、常见事件推送、客服消息时间窗口、高级群发
网页授权
snsapi_base 与 snsapi_userinfo 的区别,授权码换取用户信息
模板消息与订阅通知
模板消息、订阅通知(一次性/长期)、一次性订阅消息三套机制的选型与调用
用户管理
关注者列表、用户信息、标签管理、黑名单、账号迁移转 openid
当前事实
整理自官方文档(抓取于 2026-09-17),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| Base URL | https://api.weixin.qq.com |
| 换 token | GET /cgi-bin/token?grant_type=client_credential&appid=&secret=,7200 秒;推荐改用 POST /cgi-bin/stable_token |
| 成功判定 | HTTP 200 + 响应体 errcode 等于 0,不是 HTTP 状态码 |
| 网页授权 scope | snsapi_base(静默,仅 openid)vs snsapi_userinfo(需用户同意,拿昵称头像) |
| 客服消息窗口 | 用户发消息后 48 小时内最多 5 条;关注/扫码/点菜单是 1 分钟内最多 3 条 |
照通用经验写容易错的 6 件事
来自官方文档,还没有用真实凭证验证。
- token 只能放 URL 查询参数,不是 Authorization 头。无凭证探测:不带 access_token 参数返回
41001 access_token missing,不是 401。 - 两套换 token 接口的 token 互相隔离。
/cgi-bin/token(旧)与/cgi-bin/stable_token(新,推荐)各自维护自己的 access_token,不能混用刷新逻辑。 - 模板消息、订阅通知、一次性订阅消息三套机制并存,不是简单的新旧替代。三者的 template_id 体系、data 键名格式(.DATA 后缀 vs 裸键名)、触发前提都不通用。
- 网页授权的 access_token 与全局 access_token 是两套不同 token。无凭证探测证实两者的报错文案不同:全局系列会提示改用稳定版接口,网页授权系列不会。
- 被动回复必须在 5 秒内同步返回。超时或回复非法内容会让用户看到系统提示;处理不完就回
success或空串,耗时逻辑改走客服消息异步下发。 - MarkFail 自动屏蔽:多次推送失败后微信会暂停向你的服务器推送消息 1 分钟。这段时间内代码层面看不到任何错误请求,排查'突然收不到消息'要先查接口告警。
无凭证探测
- 换 token 接口对格式不合法的 appid 一律返回 40013,即使缺少 grant_type 参数也是先报 appid 错误
- 伪造 access_token 调 cgi-bin 系列接口,报错文案主动建议改用 getStableAccessToken;伪造网页授权 access_token 调 sns 系列接口时报错文案不带这句建议
- 18 次无凭证探测全部返回 HTTP 200,业务结果体现在 JSON 的 errcode 字段,没有一次返回非 200 状态码