一、推送消息需求

        一个简单常见的需求:推送小程序消息通知到用户!

        需要解决的问题:

  • 小程序消息推送服务有什么限制?
  • 小程序可支持推送哪些类型消息?
  • 如何实现小程序消息通知推送服务?

二、小程序提供的能力

        小程序支持通过【消息模板】向“订阅消息”的用户推送消息通知!

  • 支持向主动“订阅消息”的用户推送通知(注意:这里是“订阅消息”而非订阅小程序),不支持主动向未订阅消息用户推送通知
  • 支持通过【消息模板】发送“订阅消息”,不支持发送任意无模板消息;
  • 一般小程序不支持自定义消息模板(目前自定义消息模板功能已废弃,暂不确定哪些类型小程序或仍可自定义消息模板,有哪些方面的限制)
  • 一般小程序仅支持从官方提供的公共模板库中选择【消息模板】
  • 一般小程序仅可支持发送“一次性订阅消息”,即“一次订阅,一次推送”
  • 目前仅公共服务类小程序可支持发送“长期订阅消息”,即“一次订阅,长期推送”

1、订阅消息能力

小程序订阅消息 | 微信开放文档

微信小程序实现消息推送 java 小程序的消息推送_微信小程序实现消息推送 java

 2、三种消息类型

由于长期订阅目前仅面向公共服务开放,如此我等普通小程序就只能选择一次性订阅了!

微信小程序实现消息推送 java 小程序的消息推送_微信小程序实现消息推送 java_02

 3、不支持自定义模板

1)自定义消息模板接口已废弃

微信小程序实现消息推送 java 小程序的消息推送_小程序_03

 2)不支持新建自定义模板

微信小程序实现消息推送 java 小程序的消息推送_自定义消息_04

三、订阅消息的实现流程分析

1、实现步骤

小程序订阅消息 | 微信开放文档

微信小程序实现消息推送 java 小程序的消息推送_微信_05

2、完整流程

        实现发送订阅消息,首先需要配置消息模板、获取小程序的appkey、secret、用户openid、token等,因此,从0到1的完整实现流程如下:

微信小程序实现消息推送 java 小程序的消息推送_自定义消息_06

四、一次性订阅消息的实现及示例

1、配置消息模板+获取appid+secret

链接:微信公众平台

 1)配置消息模板

微信小程序实现消息推送 java 小程序的消息推送_微信_07

2)获取appid + secret

微信小程序实现消息推送 java 小程序的消息推送_自定义消息_08

2、登录认证并获取openid

 小程序登录 | 微信开放文档

 

微信小程序实现消息推送 java 小程序的消息推送_微信_09

1)获取code

wx.login(Object object) | 微信开放文档

wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://example.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

2)获取openid

auth.code2Session | 微信开放文档

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

3、订阅消息

 wx.requestSubscribeMessage(Object object) | 微信开放文档

wx.requestSubscribeMessage({
  tmplIds: [''],
  success (res) { }
})

4、获取token

auth.getAccessToken | 微信开放文档

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

5、发送订阅通知

subscribeMessage.send | 微信开放文档

POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
Accept: */*
Cache-Control: no-cache
Content-Type: application/json;charset=UTF-8

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "miniprogram_state":"developer",
  "lang":"zh_CN",
  "data":{
        "character_string1":{
            "value":"FK20220819001"
        },
        "phrase2":{
            "value":"审批通过"
        },
        "time3":{
            "value":"2022年08月19日 15:01"
        },
        "thing4":{
            "value":"领导同意了"
        }
    }
}

注意:data数据的key与消息模板定义一致

6、示例

微信小程序实现消息推送 java 小程序的消息推送_自定义消息_10

四、链接

微信公众平台

小程序订阅消息 | 微信开放文档

小程序登录 | 微信开放文档

wx.login(Object object) | 微信开放文档

auth.code2Session | 微信开放文档

wx.requestSubscribeMessage(Object object) | 微信开放文档

auth.getAccessToken | 微信开放文档

subscribeMessage.send | 微信开放文档