微信小程序留言回复后下发订阅消息

订阅消息很多例子是同步的,如订单成功等,但是律师咨询留言之类的往往是异步的,有空了再回复,然后通过订阅消息通知咨询用户。

流程为:用户留言->律师回复->发送订阅消息给用户->用户查看回复。

订阅消息模板先到后台去找,根据注册类别有默认的。

用户留言这里将授权合二为一。

 

js里处理没授权会调取授权用户名,然后写入数据库,这里有坑,注意用提示框触发订阅权限,不能自然触发。

const db = wx.cloud.database()
const liuyan = db.collection('liuyan')
onGetUserInfo: function (e) {
    var that = this  
    console.log(e)
    if (!this.data.logged && e.detail.userInfo) {
      imageurl = e.detail.userInfo.avatarUrl,
      nickName = e.detail.userInfo.nickName      
      liuyan.add({
        // data 字段表示需新增的 JSON 数据
        data: {

          name: nickName,
          content: newnote,
          imageurl: imageurl,
          time: Date.now()
        },
        success: function (res) {
          // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
          console.log(res)
         wx.showModal({
                title: '提示',
                content: '改功能需要订阅',
                success(res) {
                  if (res.confirm) {
                    console.log('用户点击确定')
                    wx.requestSubscribeMessage({
                      tmplIds: ['AsKDDpIhG-mnN4IIYL_yaVScGXcFycq9aLXR3tW-QWE'], // 此处可填写多个模板 ID,但低版本微信不兼容只能授权一个
                      success(res) {
                        console.log('已授权接收订阅消息')
},
                      fail(res) {
                        console.log(res)
                      }
                    })
                  } else if (res.cancel) {
                    console.log('用户点击取消')
                  }
                }
              })

管理员通过密码或openid权限进入处理留言界面,进行回复,更新数据库数据,这里注意要调用云函数update处理更新,客户端调用没权限,云函数写法要写成promise形式,否则有坑。云函数成功返回后客户端然后再调用send云函数,发送订阅消息,注意要传用户的openid。

click: function () {
   
    wx.cloud.callFunction({
      name:'updata',
      data:{
        _id:_id,
        answer:answer  
      }
    }).then(res => {
          console.log("云函数返回")
          console.log(res)
        }).catch(err => {
          console.log(err)
        })
    // 云调用
        wx.cloud.callFunction({
          name: 'sendtest',
          data:{
            _id: _id,
            _openid: openid
          }
         
        }).then(res => {
          console.log("云函数返回")
          console.log(res)
        }).catch(err => {
          console.log(err)
        })
      

云函数update的代码

/ 云函数入口函数
exports.main = async (event, context) => {
  console.log(event)
  const _id = event._id
  const answer = event.answer
  try {
    return await liuyan.where({
    _id: _id
  }).update({
    data: {
      // 表示指示数据库将字段自增 10
      answer: answer
        }
      })
  } catch (e) {
    console.error(e)
  }
}

云函数send的代码

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

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const openid = event._openid
  const id=event._id
  
  const sendResult = await cloud.openapi.subscribeMessage.send({
    touser: openid,
    templateId: 'AsKDDpIhG-mnN4IIYL_yaVScGXcFycq9aLXR3tW-QWE',
    miniprogram_state: 'developer',
    page: 'pages/show/show?id='+id,
    // 此处字段应修改为所申请模板所要求的字段
    data: {
      thing1: {
        value: '留言有回复',
      },
      time2: {
        value: '2020-01-01 00:00',
      },
    }
  })


  return sendResult

}

 

你可能感兴趣的:(小程序)