小程序云开发搭配数据库云函数实现订阅消息

650 阅读2分钟

前言

在微信小程序里,如果我们没学过后端语言,又想做数据存储,订阅的话,可以使用微信自带的云开发,上手了云开发,真的超级好用,拓展:可以给女朋友开发专属你们的小程序喔

正文

一、微信后台配置订阅模板

找到订阅功能

image.png

获取到配置

image.png

注意:详细内容我们会在云函数会使用到

二、找到云开发后台,在数据库新增个表存储用户数据,用于发布订阅消息使用

image.png 这里我用到的是使用openid作为唯一标识

在小程序端代码插入数据库里

image.png

三、云开发新增订阅消息的云函数

在config.json开放权限“订阅消息”

{ "permissions": { "openapi": [ "subscribeMessage.send" ] }, "triggers": [ { "name": "myTrigger", "type": "timer", "config": "0 0 9 * * * *" } ] }

triggers是微信的触发器,定时触发,就不用人工去触发,怎么配置在微信文档都能清晰的找到,链接: developers.weixin.qq.com/miniprogram…

云开发订阅代码

1.获取数据库所有的数据

tips:因为有最多一次取 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取 `

const MAX_LIMIT = 100
 // 先取出集合记录总数
let countResult  =  await  db.collection('subscript_user').where({
  date:yesterDay
}).count()
let total = countResult.total
// 所有数据
let totalData  = []
let tasks = []
// 计算需分几次取
const batchTimes = Math.ceil(total / 100)

for (let i = 0; i < batchTimes; i++) {
  const promise = db.collection('subscript_user').where({
    date:yesterDay 
  }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
  tasks.push(promise)
}
totalData =  (await Promise.all(tasks)).reduce((acc, cur) => {
  return {
    data: acc.data.concat(cur.data),
    errMsg: acc.errMsg,
  }
}) 

` where是我业务上的需要,可以不用关注

2.接着往下写订阅的代码

tips: cloud.openapi.subscribeMessage.send一次调用只能发给一个用户,所有要循环调用该接口 `

for(let a = 0;a < totalData.data.length;a++){
    cloud.openapi.subscribeMessage.send({
        "touser":totalData.data[a]["_openid"],
        "page":`pages/xxx/xxx`
         lang: 'zh_CN',
        "templateId":"模板ID
        "miniprogramState": 'formal',
        "data": {
            "thing6": {
              "value": "xxx"
            },
            "thing2": {
              "value": `xxxx投票`
            },
            "thing1": {
              "value": "投票开始啦,请进入小程序投票!"
            },
            "thing9": {
              "value": "每日都来投票喔"
            },
        } 
    })
}

题外话:如果数据库全部发布完,可以清空掉数据库的数据。这里使用 删除多条记录(page每条数据都包含的)

await db.collection('subscript_user').where({
  page:db.command.exists(true),
}).remove()

`

结语

到这里,整个订阅消息就跑通了。有几点注意,触发器必须“上传并部署:所有文件”完成之后,在上传,否则会出现其他问题。是不是很简单,赶紧去试试吧。拓展:可以给女朋友订阅你们自己的消息,提醒他节日快到了,黑丝安排