feat(subscribe): 新增拉取小程序真实模板列表诊断(定位40037)

- 新增 GET /api/admin/message/templates:调用 wxaapi/newtmpl/gettemplate 返回当前 appId(脱敏) 下真实模板列表,并标出后台已填但不在列表中的ID

- 测试推送 diagnostics 增加 appIdMasked,便于核对 appId

- 后台新增「拉取小程序模板列表(核对ID)」按钮与不匹配高亮提示

- 文档补充 40037 排查步骤;回归 86 套件/632 用例全绿
这个提交包含在:
xcbyy
2026-10-19 10:26:10 +08:00
父节点 cacc478d71
当前提交 584e526bca
共有 4 个文件被更改,包括 152 次插入 和 5 次删除

查看文件

@@ -134,7 +134,8 @@ MYSQL_DATABASE=peiwan
2. `总开关 未开启` → 后台打开"开启微信通知"总开关。
3. `目标用户 openid 缺失` → 该用户必须通过**微信登录**过小程序(REST 走 `/api/auth/wechat-login` 换 openid)。
4. `appId/appSecret 缺失` → 在微信支付/小程序凭证配置里填写真实 `appId` 与 32 位 `appSecret`。
5. 以上都 ✅ 但仍失败 → 看后台提示的**微信返回码**:`43101` 用户未授权(让用户在小程序内重新点「平台消息与通知」授权)、`47003` 模板字段名/长度与模板不一致、`40037` 模板ID无效。
5. 以上都 ✅ 但仍失败 → 看后台提示的**微信返回码**:`43101` 用户未授权(让用户在小程序内重新点「平台消息与通知」授权)、`47003` 模板字段名/长度与模板不一致、`40037` 模板ID无效(**最常见:该模板ID不属于当前 appId**)。
- `40037` 排查:点后台「**拉取小程序模板列表(核对ID)**」,会显示当前 appId(脱敏)与其下真实存在的订阅消息模板;若后台填写的 ID 不在列表中,即为 appId 与建模板的小程序不一致(或用了公众号/服务号的模板ID)。用列表里的真实 ID 覆盖即可。
6. 订阅消息为**一次性**:用户授权一次只能收 1 条;高频场景需每次动作前请求授权(代码已在下单/报名/提现前请求)。
## 八、内容安全(可选)