微信小程序订阅消息推送

一、创建消息模板

二、获取模板消息的参数

点击模板消息详情查看模板消息参数。

三、获取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;
}

成品图

经验分享 程序员 微信小程序 职场和发展