system.wechat.appid、system.wechat.secret,并确保服务器可访问微信开放接口。templateId。wx.requestSubscribeMessage 完成用户授权。wx.login 得到 code。code 发送给后端(可复用现有登录接口),后端换取 session_key 和 openid,并存入 Redis wx_session_id_{sessionId}。code 调用 POST /api/wx/phone,后端使用 getAccessToken + getUserPhoneNumber 获取并返回手机号。wx.requestSubscribeMessage({tmplIds: [templateId]})。openid、templateId、page、data 传给 POST /api/wx/send。TemplateMessage,通过 WxService.sendTemplateMessage 调用微信 message/subscribe/send 完成推送。GET /api/wx/access-token:调试用,查看当前 token。POST /api/wx/phone:请求体 { "code": "<wx.login 返回的 code>" },返回 { "phoneNumber": "..." }。POST /api/wx/send:请求体示例:
{
"openid": "用户openid",
"templateId": "模板ID",
"page": "pages/index/index",
"data": {
"thing1": { "value": "张三" },
"time2": { "value": "2024-01-01 12:00" }
},
"clientMsgId": "可选-幂等ID"
}
返回 { "success": true/false }。
data 的 key 必须与模板的关键词 ID 对应,value 为 { "value": "展示内容" }。page 需是已发布的小程序页面路径。clientMsgId 可用于防止重复推送(微信侧支持幂等)。