微信小程序实现消息推送(云函数实现)

547 阅读2分钟

一、配置环境ID

// app.js
App({
  onLaunch: function () {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        // env 参数说明:
        //   env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境(第一个创建的环境)
        env: '环境ID',
        traceUser: true,
      });
    }

    this.globalData = {};
  }
});

二、设置订阅消息模板

小程序后台管理---功能---订阅消息---公共模板库---选用 image.png

注意

  • 必须有小程序类目 首页---小程序类目 image.png
  • 点击详情可进行自定义编辑 模板ID则为我们云函数的推送模板ID image.png
  • 详情页如下: image.png

三、消息推送授权

注意

  • 用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面
 wx.requestSubscribeMessage({
      tmplIds: ['模板ID'],
      success: res => {
        console.log(res);
      },
      fail: err => {
        console.error(err)
      }
    })
  • 返回值包括'accept'、'reject'、'ban'、'filter'。
  • 'accept'表示用户同意订阅该条id对应的模板消息;
  • 'reject'表示用户拒绝订阅该条id对应的模板消息;
  • 'ban'表示已被后台封禁;
  • 'filter'表示该模板因为模板标题同名被后台过滤。

返回值效果图:

image.png

四、创建云函数

  • 创建云函数---上传并部署---开启本地调试
  • config.json配置
{
  "permissions": {
    "openapi": [
      "subscribeMessage.send"
    ]
  }
}
  • index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext().OPENID
  try {
    //可通过event接收调用云函数传递的值
    //touser属性值为openID  可通过cloud.getWXContext().OPENID获取
    //data中各类型限制可参照各下方网址
    const result = await cloud.openapi.subscribeMessage.send({
      "touser": wxContext,
      "page": 'index',
      "lang": 'zh_CN',
      "data": {
        "thing1": {
          "value": event.a.b
        },
        "thing2": {
          "value": 'A4408'
        },
        "time4": {
          "value": '2019-11-27 12:14:34'
        },
        "thing5": {
          "value": '多辣少盐'
        },
        "phrase7": {
          "value": '一区'
        }
      },
      "templateId": '模块ID',
      "miniprogramState": 'developer'
    })
    return result
  } catch (err) {
    return err
  }
}

此网址为参数限制详情:发送订阅消息 | 微信开放文档 (qq.com)

image.png

五、调用云函数

  • 调用云函数 --- 清除内存 --- 编译项目
 wx.cloud.callFunction({
      name: 'sendmessage',
      data:{
        a:{
          b:2,
          c:22
        }
      },
      success: res => {
        console.log(res);
      },
      fail: err => {
        console.error(err)
      }
    })