链接
简书博主示例: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