微信公众号模板消息:怎么准备、模板怎么配
流程就两步:
先拿 access_token
→ 再发模板消息(带上日志链接)
正式公众号和企业号流程类似,学习阶段用测试号就够。
1. 准备测试号
打开微信公众平台测试号:
https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
用微信扫码登录。页面上会给你:
| 页面上的名字 | 代码 / Secret 里用的名字 | 干什么 |
|---|---|---|
| appID | WEIXIN_APPID |
测试号身份证 |
| appsecret | WEIXIN_SECRET |
换 token 的钥匙 |
这两项不要写进仓库,放到 GitHub Secrets。
1.1 拿到你的 OpenID
同一页往下找「测试号二维码 / 关注测试号」。
你自己用微信扫一下,列表里会出现你的用户,里面有一串 openid。
这就是消息发给谁:
- Secret 名:
WEIXIN_TOUSER - 代码字段:
touser
不扫码、没有 OpenID,接口调用成功也收不到消息。
2. 新建消息模板
还在测试号页面,找到 模板消息接口 → 新增测试模板。
2.1 占位符规则(必须按这个写)
微信模板里的变量格式是:
{{字段名.DATA}}
- 以
{{开头 - 以
.DATA}}结尾 - 中间的字段名要和代码里
data的 key 完全一致
写错一个字母,手机上这块就是空的。
2.2 本项目用的模板(直接抄)
代码里四个字段见 TemplateMessageDTO.TemplateKey:
repo_name项目branch_name分支commit_author作者commit_message提交说明
测试模板标题可以叫:代码评审通知
模板内容建议如下:
项目:{{repo_name.DATA}}
分支:{{branch_name.DATA}}
作者:{{commit_author.DATA}}
说明:{{commit_message.DATA}}
点击详情查看评审记录。
提交后,微信会生成 模板 ID。
- Secret 名:
WEIXIN_TEMPLATE_ID - 代码字段:
template_id
点开手机消息时跳转的地址,不是写在模板正文里,而是发消息时传的 url。
本项目会把「日志仓那篇 md 的 GitHub 链接」填进去。
2.3 发到微信上长什么样
接口 JSON 大致是:
{
"touser": "你的OpenID",
"template_id": "你的模板ID",
"url": "https://github.com/xxx/log/blob/master/2026-08-14/xxx.md",
"data": {
"repo_name": { "value": "openai-code-review" },
"branch_name": { "value": "master" },
"commit_author": { "value": "zhangsan" },
"commit_message": { "value": "fix: 修改登录" }
}
}
data 里每个字段都是 {"value": "具体文字"},不要只传字符串。
3. 要调的两个接口
3.1 获取 access_token
文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
GET https://api.weixin.qq.com/cgi-bin/token
?grant_type=client_credential
&appid=APPID
&secret=APPSECRET
成功会返回:
{
"access_token": "TOKEN",
"expires_in": 7200
}
注意:
- token 大约 2 小时过期
- 重新获取会使旧 token 失效
- 学习项目每次发消息现取一次就行
- 正式环境应做中控缓存,不要每个请求都刷一次
本项目对应:WXAccessTokenUtils.getAccessToken(appid, secret)。
3.2 发送模板消息
POST https://api.weixin.qq.com/cgi-bin/message/template/send
?access_token=ACCESS_TOKEN
Content-Type: application/json
请求体就是上面第 2.3 节那个 JSON。
本项目对应:WeiXin.sendTemplateMessage(logUrl, data)。
4. 和代码评审怎么接上
git push
→ Action 跑 JAR
→ 取出 diff,模型评审
→ 评审 md 推到日志仓,得到 logUrl
→ 拿微信 token
→ 发模板消息(项目/分支/作者/说明 + 点击跳转 logUrl)
→ 手机收到通知
模板本身不放评审长文,只放摘要和链接。详情点进 GitHub。
5. GitHub Secrets 清单
| Secret | 从哪抄 |
|---|---|
WEIXIN_APPID |
测试号页面 appID |
WEIXIN_SECRET |
测试号页面 appsecret |
WEIXIN_TOUSER |
扫码关注后列表里的 OpenID |
WEIXIN_TEMPLATE_ID |
新建模板后生成的模板 ID |
不要把这四项写进 Java 源码或测试类。仓库里若还有示例硬编码,上线前删掉,只读环境变量。
6. 自己先测通再接评审
建议顺序:
- 测号、扫码、建模板,四项都拿到
- 只调「取 token + 发一条假消息」,手机能收到
- 再让 Action 在评审成功后调用同一套发送逻辑
手机收不到时先查:
- 有没有关注测试号
touser是不是你的 OpenID- 模板字段名是否和代码 key 一致(
repo_name对{{repo_name.DATA}}) - token 接口有没有报
invalid appid/invalid credential
7. 以后模板会变怎么办
模板 ID 在测试号、正式号、不同业务里经常换。
课里的建议:代码里写死的是业务场景(例如「代码评审完成」),模板 ID 放配置或表里。
本项目现阶段用一个 Secret WEIXIN_TEMPLATE_ID 就够。
8. 最短记忆
测试号拿 appid / secret
→ 扫码拿 OpenID
→ 建模板:{{repo_name.DATA}} 等四个字段
→ 记下模板 ID
→ 发消息前先 GET token
→ 再 POST 模板(data + 跳转 url)
模板决定手机上显示什么;url 决定点进去看哪篇评审。