一.什么是订阅消息

微信里有一个服务通知,我们经常收到的各种消息,就是通过订阅消息进行发送的,订阅消息分为二种:

java 微信小程序订阅消息 小程序订阅消息实例_云服务

进一步了解跳转到官方文档中去学习吧官方解释

二.在小程序中使用订阅消息

业务:用户点击按钮,我们返回用户如下信息:

java 微信小程序订阅消息 小程序订阅消息实例_上传_02

2.1第一步:创建模板

1.进入到小程序官网首页,点击订阅消息

java 微信小程序订阅消息 小程序订阅消息实例_小程序_03


公共模板>任务模板>选择红框框里的哪一个>选用

java 微信小程序订阅消息 小程序订阅消息实例_上传_04


选择参数,下面的场景说明也要填写,然后提交

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_05


注意模板ID是一个很重要的参数,点击详情

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_06


进行详情页面,记住thing1和thing2参数【模板不一样参数名也不一样】

java 微信小程序订阅消息 小程序订阅消息实例_云服务_07

2.2 第二步:创建云服务

由于我已经创建过云服务的环境了,这里可能有点不一样但是,大概过程差不多

进行微信小程序开发工具里>云开发

java 微信小程序订阅消息 小程序订阅消息实例_小程序_08


编写环境名称,和支付方式

java 微信小程序订阅消息 小程序订阅消息实例_上传_09


这里注意一下按量收费,我使用的是预付费,用的免费套餐,但是免费套餐现在一天可访问人数为500有点坑:

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_10


java 微信小程序订阅消息 小程序订阅消息实例_上传_11


找到自己的环境ID

java 微信小程序订阅消息 小程序订阅消息实例_微信_12

2.3 第三步:云服务项目配置

第一个app.js中进行配置

//云数据
wx.cloud.init({
  env:"你的环境ID"
})

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_13


然后创建红框框里的三个文件

java 微信小程序订阅消息 小程序订阅消息实例_小程序_14


第一个文件创建方式为,箭头指向的文件夹,点击创建文件夹名为cloud

java 微信小程序订阅消息 小程序订阅消息实例_上传_15


另外二个创建方式如下:文件名分别对应:getopenid,sendmessage

java 微信小程序订阅消息 小程序订阅消息实例_微信_16

getopenid里面关心红框框里的即可:

java 微信小程序订阅消息 小程序订阅消息实例_云服务_17


,这里的DYNAMIC_CURRENT_ENV其实就是环境id只是动态的获取环境Id

java 微信小程序订阅消息 小程序订阅消息实例_小程序_18


getopenid文件就是获取openid,这个openid可以理解为用户家的地址,我要给用户发消息肯定要知道该用户家在哪里吧

java 微信小程序订阅消息 小程序订阅消息实例_小程序_19


index.js内容如下:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

java 微信小程序订阅消息 小程序订阅消息实例_小程序_20


sendmessage里,主要关心红框框里的内容:

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_21

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  try{
    let  tmplId='模板ID'
    let index='pages/index/index'
    const result = await cloud.openapi.subscribeMessage.send({
       touser: event.openId,
       page: index,
       data: {
          thing1: {
            value:event.thing1
        },
        thing2: {
          value:event.thing2
        }
      },
      templateId: 模板ID
    })
  return result
  }catch(err){
    console.log(err)
      return err
  }

}

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_22


java 微信小程序订阅消息 小程序订阅消息实例_微信_23


里面的参数一定要填对!上面的配置完了就上传到云服务中去!

java 微信小程序订阅消息 小程序订阅消息实例_小程序_24


部署完之后就是通过云服务进行查看是否上传成功!

java 微信小程序订阅消息 小程序订阅消息实例_小程序_25

2.3 第三步:项目使用订阅消息

在utils中创建一个messagepush.js文件

java 微信小程序订阅消息 小程序订阅消息实例_上传_26


这里的send就是用来发送消息的函数,实现方式就三步

  • 进行授权
  • 获取openid
  • 进行发送

具体操作看源码,解释查找官方文档:

function send(thing1,thing2){
  //【1】进行授权
  let  tmplId='Xl-JeelQZqmAWcUy9VlyDc7eWy2HoPTdenK4pbr1V4w'
  wx.requestSubscribeMessage({
    tmplIds: [tmplId],
    success (res) { 
      console.log('授权成功',res)
      //【2】获取openid
      wx.cloud.callFunction({
        name:'getopenid'
      }).then(res=>{
        //【3】进行发送
        wx.cloud.callFunction({
          name:'sendmessage',
          data:{
            openId:res.result.openid,
            thing1:thing1,
            thing2:thing2
          }
        }).then(res=>{
        console.log('发送成功',res)
        }).catch(res=>{
        console.log('发送失败',res)
        }) 
      }).catch(res=>{
        console.log("获取失败",res)
      })
    },fail(res){
      console.log('授权失败',res)
    }
  })

}


module.exports = {
  send: send
}

小程序中创建一个buttion的按钮:

在点击事件中,调用send方法进行发送消息即可

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_27


java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_28

java 微信小程序订阅消息 小程序订阅消息实例_java 微信小程序订阅消息_29


最后运行效果:

java 微信小程序订阅消息 小程序订阅消息实例_上传_02