微信小程序订阅消息功能
时间:2022-07-23
本文章向大家介绍微信小程序订阅消息功能,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
小程序订阅消息
功能介绍
消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。
- 订阅消息推送位置:服务通知
- 订阅消息下发条件:用户自主订阅
- 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面
使用说明
步骤一:获取模板 ID 步骤二:获取下发权限 详见小程序端消息订阅接口 wx.requestSubscribeMessage 步骤三:调用接口下发订阅消息 详见服务端消息发送接口 subscribeMessage.send
image.png
image.png
uni.requestSubscribeMessage({
tmplIds: [''],
success (res) { }
})
- wx.requestSubscribeMessage(Object object)
- subscribeMessage.send
<form :report-submit="true" @submit="createOrder" style="display: flex; justify-content: center;">
</form>
async createOrder(e) {
try {
await this.joinFormId(e) //收集formId
}
}
payment(info) { //数字现金支付
let params = info.payment
params.success = (res) => {
// #ifdef MP-ALIPAY
if (res.resultCode != 9000 && res.resultCode != 8000) {
uni.showToast({
title: '未支付押金成功!',
icon: 'none'
});
return
}
// #endif
uni.showLoading({
mask: true,
title: '正在处理...'
});
setTimeout(_ => {
uni.hideLoading()
this.goOrder(info.order_sn)
}, 2000);
}
params.fail = (err) => {
uni.showToast({
title: '未支付押金成功!',
icon: 'none'
});
}
uni.requestPayment(params)
},
joinFormId(e) {
return new Promise((resolve, reject) => {
//#ifdef MP-WEIXIN
var wechat_temp = this.$store.state.user.wechat_temp
if (!wx.requestSubscribeMessage) {
resolve()
return
}
wx.requestSubscribeMessage({
tmplIds: [wechat_temp.lend_success, wechat_temp.return_success],
success: (res) => {
console.log('res', res)
const param = {
is_lend: res[wechat_temp.lend_success] === 'accept' ? 1 : 0,
is_return: res[wechat_temp.return_success] === 'accept' ? 1 : 0
}
if (param.is_lend || param.is_return) {
resolve()
subscribeAuthApi(param).then(response => {
console.log('subscribeAuthApi', response)
})
} else {
uni.showModal({
content: '未授权发送通知,将收不到出借、归还通知',
confirmText: '重新授权',
cancelText: '直接租借',
success: (res) => {
if (res.confirm) {
reject()
this.request_order = false
this.createOrder()
} else {
resolve()
}
}
})
}
},
fail: (err) => {
console.log('ee', err);
uni.showModal({
content: '未授权发送通知,请到小程序设置界面开启订阅',
confirmText: '去开启',
cancelText: '直接租借',
success: (res) => {
if (res.confirm) {
reject()
wx.openSetting()
} else {
resolve()
}
}
})
}
})
//#endif
//#ifdef MP-ALIPAY
console.log('MP-ALIPAY')
const form_id = e.detail.formId
if (form_id.indexOf(' ') !== -1) {
return
}
joinFormIdApi({
form_id
})
resolve()
//#endif
})
},
image.png
用户需要点击“总是保持以上,不再询问”,才可以获取到getSetting返回的用户授权信息
image.png
requestMsg(){
return new Promise((resolve, reject) => {
wx.requestSubscribeMessage({
tmplIds: [" -ZwAFL- "],
success: (res) => {
if (res[' -ZwAFL- '] === 'accept'){
wx.showToast({
title: '订阅OK!',
duration: 1000,
success(data) {
//成功
resolve()
}
})
}
},
fail(err) {
//失败
console.error(err);
reject()
}
})
})
}
openMsg() {
var that = this
// 获取用户的当前设置,判断是否点击了“总是保持以上,不在询问”
wx.getSetting({
withSubscriptions:true, // 是否获取用户订阅消息的订阅状态,默认false不返回
success(res) {
if(res.authSetting['scope.subscribeMessage']) { // 用户点击了“总是保持以上,不再询问”
uni.openSetting({ // 打开设置页
success(res) {
console.log(res.authSetting)
}
});
}else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
var templateid = that.setting.templateid.map(item => item.tempid)
uni.requestSubscribeMessage({
tmplIds: templateid,
success (res) {
console.log(res)
},
fail:(res) => {
console.log(res)
}
})
}
}
})
},
模版消息链接 fromid怎么成这样了
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html
image.png
- 在Java EE7框架中使用MongoDB
- 用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记
- iPhone的Wi-Fi芯片漏洞利用POC公布,赶紧更新系统吧
- No.003 Longest Substring Without Repeating Characters
- 【Spark研究】极简 Spark 入门笔记——安装和第一个回归程序
- 通常Java开发人员如何进行数据排序?
- 消息服务框架使用案例之--大文件上传(断点续传)功能
- Java中三种Set类型用法、性能大比拼
- Android基础总结(5)——数据存储,持久化技术
- 如何突破Windows环境限制打开“命令提示符”
- 【Spark研究】Spark之工作原理
- Java中泛型使用的必要性
- “一切都是消息”--MSF(消息服务框架)之【发布-订阅】模式
- Android基础总结(4)——广播接收器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- STM32 F4串口接收中断
- RTOS函数命名规则
- 通过思维导图,让女朋友搭建一个hadoop完全分布式
- FreeRTOS内核应用开发手记
- 移植FreeRTOS后运行,卡在uxDeletedTasksWaitingCleanUp
- 99%的人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系
- 什么是前缀树--打开了我的新思路
- 一个案例搞懂原码、反码、补码,不懂得请看过来
- 人人都在用,但你却不知道它背后发生了什么——浏览器的工作原理:浏览器幕后揭秘
- 这有一把钥匙,打开MySQL死锁问题!
- 普通人如何全面了解大数据的特点,意义和发展前景
- 面试官问我Linux下常见网络命令
- 最全常用User-Agent
- 聊到JVM(还怕面试官问JVM吗?)
- Android.location.Address类方法获取GPS定位信息