小程序云开发实现订阅消息

链接

简书博主示例:https://www.jianshu.com/p/d90f22dac001
官方文档:
官方文档1
文档2
云调用

使用方法demo

假如这是一个点餐系统,想让顾客下单以后,派件员能够收到消息内容包括订单号与电话号码

首先,挑选适用的模板

进入官方文档1
在这里插入图片描述
我这里挑选的是这个
在这里插入图片描述

点击详情,后面要用到这两个 一个是模板id一个是发送内容的格式
在这里插入图片描述

小程序页面获取下发权限

获取用户权限 具体文档文档2
这里就用到了刚刚的模板ID
正常的逻辑应该是在 小程序初始化完成时,onLaunch钩子函数里用wx.getSetting来判断有没有授权,如果没有就跳出来让授权 wx.getSetting接口文档
在这里插入图片描述
有个要注意的地方
在这里插入图片描述

在这里插入图片描述
这个地方如果不勾选的话,wx.getSetting是拿不到有没有授权过的
在这里插入图片描述
勾选的话
在这里插入图片描述

现在为了演示方便,就做了个按钮 点击以后执行test方法

在这里插入图片描述

之后需要操作云函数了,用云函数调用模板消息接口
那模板消息是需要传入一些参数的,所以我们要在小程序端传入一些参数给云函数,这时候就需要知道模板消息都需要哪些参数
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html#method-cloud
必填的几项
在这里插入图片描述
因为是给接单人员用的,所以openId就可以固定成某人个的openid了,
模板id的话就是一开始申请给的模板id,这两个参数我都放到一个文件里面了,需要用到的时候引入就ok
在这里插入图片描述
data的格式是什么呢
在这里插入图片描述
key是什么呢 申请模板的时候也给了
在这里插入图片描述
在这里插入图片描述

所以我们需要传入这三个参数
在这里插入图片描述
云函数名为test

编写云函数

在这里插入图片描述
保存 右键增量上传
点击按钮 授权订阅消息以后
对应接单人的微信就能收到消息了
请添加图片描述

代码

SubscribeMessage.js

// 模板消息

import {
    
    
  tmplId,
  // 送货人员openid
  sendPeopleOpenId
} from './constant'
// 判断有没有订阅过  管理人员需要调用它 判断有没有永久授权
function isSubscribe() {
    
    
  return new Promise((resolve, reject) => {
    
    
    wx.getSetting({
    
    
      withSubscriptions: true,
      success(e) {
    
    
        if (e.subscriptionsSetting[tmplId]) {
    
    
          wx.showToast({
    
    
            title: '已经永久授权',
          })
          resolve(e)
        } else {
    
    
          reject("未永久授权")
        }
      },
      fail(err) {
    
    
        console.log(err);
        reject(err)
      }
    })
  })
}
// 授权逻辑
function requesetSubscribe() {
    
    
  return new Promise((resolve, reject) => {
    
    
    wx.requestSubscribeMessage({
    
    
      tmplIds: [tmplId],
      success(res) {
    
    
        resolve(res)
      },
      fail(err) {
    
    
        reject(err)
      }
    })
  })
}
// 管理人员点击授权按钮后调用
export function authtmpl() {
    
    
  // 如果已经永久授权过
  isSubscribe().then((res) => {
    
    
    wx.showToast({
    
    
      title: '已经永久授权',
    })
    console.log("已经永久授权了");
  }).catch((err) => {
    
    
    console.log(err);
    requesetSubscribe().then((res) => {
    
    
      // 再次判断是否授权成功
      isSubscribe().then((res) => {
    
    
        wx.showToast({
    
    
          title: '已经永久授权',
        })
      }).catch(err => {
    
    
        wx.showToast({
    
    
          title: '请勾选“总保持以上选择,不再询问”',
        })
      })
    })
  })
}
// 用户购买商品后发送订阅消息
export function sendMessage(out_trade_no, phone) {
    
    
  const data = {
    
    
    "character_string1": {
    
    
      "value": out_trade_no
    },
    "phone_number8": {
    
      
      "value": phone
    }
  }
  return new Promise((resolve, reject) => {
    
    
    wx.cloud.callFunction({
    
    
      name: 'subscribeMessage',
      data: {
    
    
        data,
        tmplId,
        sendPeopleOpenId
      }
    }).then((res) => {
    
    
      console.log(res);
      resolve(res)
    }).catch((err) => {
    
    
      console.log(err);
      reject(err)
    })
  })
}

云函数

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

// 云函数入口函数
exports.main = async (event, context) => {
    
    
  try {
    
    
    const result = await cloud.openapi.subscribeMessage.send({
    
    
        "touser": event.sendPeopleOpenId,
        "lang": 'zh_CN',
        "data": event.data,
        "templateId": event.tmplId,
      })
    return result
  } catch (err) {
    
    
    return err
  }
}

注意 报43101错误

确定用户没有取消订阅 但是依然报这个错误
这是为什么呢 ?
虽然是长期授权了,但是但是!!!! 订阅次数是默认一次的
https://developers.weixin.qq.com/community/develop/doc/000aca915645284919dc3814b51c00

猜你喜欢

转载自blog.csdn.net/xiaozhazhazhazha/article/details/121337626
今日推荐