微信小程序订阅消息推送
一、创建消息模板
二、获取模板消息的参数
点击模板消息详情查看模板消息参数。
三、获取openId
先拿到用户的openId(如已获取,则跳过)。
3.1 前端从小程序获取登录凭证code
前端先从小程序端拿到用户code,然后将code传给后端进行解析。 官方文档: 示例代码:
wx.login({ success (res) { if (res.code) { //发起网络请求 wx.request({ url: https://example.com/onLogin, data: { code: res.code } }) } else { console.log(登录失败! + res.errMsg) } } })
3.2 后端解析code,拿到openId
官方文档: 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。 请求地址:
Java代码如下:
其中,WechatAppToken是根据小程序接口返回值建的一个类:
@Data public class WechatAppToken { public Integer errcode; public String errmsg; public String openid; public String sessionKey; public String unionId; }
四、获取access_token
官方文档: 获取小程序全局唯一后台接口调用凭据(access_token)。调用绝大多数后台接口时都需使用 access_token,开发者需要进行妥善保存。 请求地址:
Java代码如下:
五、发送消息
官方文档: 发送订阅消息。 请求地址:
需要注意的是,该接口是有次数限制的。 开通支付能力的是3kw/日,没开通的是1kw/日。
Java代码:
其中WxMsgDto 类代码如下:
@Data public class WxMsgDto { /** * 接收者(用户)的 openid */ private String touser; /** * 所需下发的订阅模板id */ private String template_id; /** * 点击模板卡片后的跳转页面,仅限本小程序内的页面 */ private String page = "pages/index/index"; /** * 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } */ private Map<String, WxTemplateDataDto> data; }
WxTemplateDataDto 代码如下:
@Data @AllArgsConstructor public class WxTemplateDataDto { private String value; }