如何实现个人小程序订阅消息功能,把消息记录到云数据库?

1、进入微信公众平台,选一个订阅消息模版(划线地方的字段后面都会用到)

 2、然后在我们的小程序js代码中写绑定点击事件

<button bindtap="subMessage" class="sub-btn" type="primary">订阅最新活动</button>
// 页面中绑定点击事件 调用获取订阅消息权限
subMessage(){
    wx.requestSubscribeMessage({
        tmplIds: [this.data.template_id], // 这里放的是我们上面模版的ID 
        success:(res)=>{
          console.log(res)
            // 这里写与后端交互的代码,
            // 我这里是自己的代码逻辑,我是提交到云开发数据库中的,紧参考
            this.keepSubMessage(res[this.data.template_1_id])
        },
        fail:(err)=>{
          console.log(err)
        }
      })
},

// 记录订阅数据
keepSubMessage(state){
    wx.cloud.callFunction({
      name:'subscribe-message',  // 云函数名称
      data:{                     // 传到云函数的参数
        type:'add',
        openid: app.globalData.openid,  // 记录当前订阅者的openid
        template_id: this.data.template_id,  // 模版id
        state:state,
        nickName: app.globalData.userData.nickName,
        avatarUrl: app.globalData.userData.avatarUrl,
        gender: app.globalData.userData.gender
      }
    }).then(res=>{
      if(state=='accept'){
        wx.showToast({
          title: '订阅成功',
        })
      }
    })
  },

3、 这是我的云函数代码

// 云函数入口函数
exports.main = async (event, context) => {
  switch (event.type){
    case 'add':
      return await verifyHaveMessage(event)
    case 'sendIndex':
      return await sendIndex(event)
      case 'sendAll':
        return await sendAll(event)
    default:
      return
  }
}
// 判断是否已存在该用户订阅信息 ,因为用户可能多次点击订阅,这我都做记录
verifyHaveMessage = async (event)=>{
  const message = await db.where({
    openid: event.openid
  }).count();
  const total = message.total;
// 如果存在用户订阅数据,就更新该条数据相应字段
  if(total){
    return updateInfo(event);
  }else{
// 不在就创建一跳
   return addInfo(event);
  }
}


// 添加一条订阅消息
addInfo = (event)=>{
  const result = db.add({
    data:{
      openid:event.openid,
      template_id:event.template_id,
      update_date: d,
      is_send_finish: false,
      state:event.state,
      send_count:0,
      accept_count: event.state=='accept'? 1 : 0,
      reject_count: event.state=='accept'? 0 : 1,
      nickName:event.nickName,
      avatarUrl: event.avatarUrl,
      gender: event.gender
    }
  })
  return result;
}

//  多次订阅记录
updateInfo = (event)=>{
  const options = {
      state:event.state,
      update_date: d
  }
  if( event.state=='accept'){
    options['accept_count'] =  _.inc(1);
  }else{
    options['reject_count'] =  _.inc(1);
  }
  const result = db.where({
    openid:event.openid
  }).update({
      data:options
  })
  return result
}

4、下面贴下我的数据存的字段,方便理解 

 

5、前端部分已经完结,能订阅能记录数据,下面就是如何给用户发送订阅消息,暂停下,下篇文章继续。。

(这是我自己的小程序实现,还有奖励活动奥,欢迎来访)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序实现订阅消息功能,需要在后端服务器使用Node.js来实现。以下是一个示例的Node.js源码,用于实现微信小程序订阅消息功能。 ```javascript const express = require('express'); const axios = require('axios'); const app = express(); const port = 3000; // 用于接收微信小程序订阅消息的回调 app.post('/callback', async (req, res) => { try { // 解析请求体中的数据 const data = req.body; // 向微信API发送请求,完成订阅消息的下发 await axios.post('https://api.weixin.qq.com/cgi-bin/message/subscribe/send', { touser: data.openid, // 用户的openid access_token: data.access_token, // 小程序的access token template_id: data.template_id, // 订阅消息模板ID data: data.template_data, // 订阅消息模板中的数据 }); // 返回成功响应给微信小程序 res.status(200).send('Success'); } catch (error) { // 返回错误响应给微信小程序 res.status(500).send('Failed'); } }); app.listen(port, () => { console.log(`Server is running on port ${port}`); }); ``` 上述代码中,创建了一个基于Express框架的Node.js服务器。通过定义一个`/callback`的路由,用于接收微信小程序发送的订阅消息的回调。 在回调中,首先解析请求体中的数据,包括用户的openid、小程序的access token、订阅消息模板ID以及要下发的模板数据。然后,使用axios库发送HTTP POST请求到微信API,完成订阅消息的下发。 最后,根据发送请求的结果,返回相应的成功或失败响应给微信小程序。 需要注意的是,此代码仅为示例,实际项目中还需要添加相应的错误处理等逻辑。此外,还需要配置服务器的域名与小程序进行关联,并在小程序端的代码中发送HTTP请求到该服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CjBkl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值