uniapp 微信发送订阅消息
这篇主要针对小程序进行演示,既然是发送消息,那么就有三个问题。发送什么内容,给谁发送,怎么发送!往下一条一条解决。
- 发送什么消息内容 - 通过微信公众号平台 选择对应的消息模板
选择以后在我的模板里面就出现了。

- 发给谁
既然是发送信息,那么必须有收件人的地址,在微信生态里面,只要是通过微信登录用户都会根据不同小程序分配一个唯一的openid(每个小程序都不一样,但是在当前小程序是唯一的)。因为我的系统是使用手机号码注册的,并没有使用微信登录,那么如果要得到微信分配的openid就需要在注册时候使用微信登录一次,只是为了得到当前用户的openid。代码如下
//前面是自己的注册逻辑
uni.login({
provider: 'weixin',
success: function(res) {
let appid = '*******' // 通过微信小程序后台 开发管理 开发设置得到
let secret = '*******' // 同上
let url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' +
res.code + '&grant_type=authorization_code';
uni.request({
url: url, // 请求路径
success: result => {
console.info(result.data.openid); // 在此处得到openid 保存数据库即可 每个用户在不同的小程序下是不一样的
},
});
}
});做完这一步已经得到了收件人,不过微信的限制是你需要在需要发送的地方让用户许可(如果没有这个限制,怕你的小程序一直给客户发骚扰信息),这个用个实例说下,比如我的是考试系统,那么如果客户预约了某场考试,那么我就会在预约按钮上增加一个逻辑用来获取用户允许接受信息的权限(用户点击一次,你能发一次,微信后台有记录)
//上面是考试预约逻辑
uni.requestSubscribeMessage({
tmplIds: ['*******'], // 你的模板id 此处是可以多个模板id的 不过我的是一个
success(res) {
console.log('已授权接收订阅消息')
}
})效果如下

用户点击完毕以后,等于你有了一次给当前用户发送一条当前模板的权利。如果你搞个循环让这个授权弹出5次,那么你就能给当前这个客户发送5次。
- 往下就是怎么发的问题了,可以通过自己的后台服务发送,当然也可以是前台,只要能访问网络都可以,这里选用的是python后台进行发送,其他的代码都差不多。还有考试的例子,他预约以后,我在后台建立个定时任务,当这个考试的前10分钟开始批量给预约过考试的用户发送。因为发送是通过腾讯服务发送的,所以需要先进行token认证。
appid = "***" // 微信id 获取方式和上面面一样
secret = "***" // 同上 token_url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}"
request = urllib.request.Request(token_url)
# get服务器请求
token_result = urllib.request.urlopen(request).read()
token_result=str(token_result, encoding = "utf-8")
token_result=eval(token_result)
print(token_result)
serverToken = token_result.get('access_token')认证以后得到token,就可以发送了
// data为模板的 内容
data = {# 用户的openId 就是前台注册的时候保存到数据库那个"touser": '*****',# 订阅消息模板id"template_id": "*****",# 要跳转的页面 这里可以跳转到小程序的某个页面,可以带参数"page": "pages/index/index",# 模板消息对应的内容设置 每个字段类型可以根据自己的模板设置"data": {"thing1": {"value": "距开考时间仅剩10分钟,请您按时参加!"},"thing2": {"value": "2020年国家公务员考试模拟考试"},"date3": {"value": "2019年10月1日 15:01"},"thing11": {"value": "一建水利"}}}url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={serverToken}'.format(serverToken = serverToken)# 数据格式化(从这里开始对上面的data进行格式化,转成符合post的json参数形式)
data = json.dumps(data)
# 数据格式化
data = bytes(data, 'utf8')
# 数据格式化
request = urllib.request.Request(url)
# post服务器请求
result = urllib.request.urlopen(request, data).read()
# 打印结果
print(result)最终效果

- 往下就是怎么发的问题了,可以通过自己的后台服务发送,当然也可以是前台,只要能访问网络都可以,这里选用的是python后台进行发送,其他的代码都差不多。还有考试的例子,他预约以后,我在后台建立个定时任务,当这个考试的前10分钟开始批量给预约过考试的用户发送。因为发送是通过腾讯服务发送的,所以需要先进行token认证。
uniapp 微信发送订阅消息的更多相关文章
- 微信小程序如何发送订阅消息,正确姿势来了,建议收藏!
小程序订阅消息公测已经有些日子,今天以世界上最好的语言(PHP)为例,说一下如何发送订阅消息. 1.订阅消息 其实如果用过模板消息的话,改用订阅消息挺简单的,看一下官方文档稍加摸索就能使用. 但是对于 ...
- 微信小程序发送订阅消息(之前是模板消息)
之前的模板消息已经废弃,现在改为订阅消息,订阅消息发布前,需要用户确认后才能接收订阅消息. 小程序端 index.wxml <button bindtap="send"> ...
- .netcore 3.1 C# 微信小程序发送订阅消息
一.appsettings.json定义小程序配置信息 "WX": { "AppId": "wx88822730803edd44", &qu ...
- 使用WxPusher给自己的个人微信发送提醒消息(WxPusher微信推送服务)
1.背景 我们很多时候,我们在服务器上运行软件,发生一些业务异常,需要给我们发送一个及时的提醒,或者是使用一些耗时软件,比如抢车票,抢课,刷优惠券当任务运行成功以后,也需要及时的发送消息给自己 ,告诉 ...
- 微信发送模版消息,PHP代码简单案例
function http_request($url,$data=array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); c ...
- 微信小程序开发 给微信发送模板消息提示openId无效
参数我都给好了,也是post的raw方式发送请求, openId是绝对没有问题的. 但就是一直报如下错误 {"errcode":40003,"errmsg":& ...
- 微信小程序的模板消息与小程序订阅消息
小程序订阅消息 功能介绍 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验. 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳 ...
- 微信小程序订阅消息,我踩过的坑都在这里了!
旧的模板消息将在 2020 年 1 月 10 号全面下架,也就是今天,不过貌似现在还可以用!!!我已经改好了,只不过还没有上线,准备坚持到最后一天! 0.订阅消息 简单介绍一下订阅消息的特点: 用户授 ...
- 微信小程序订阅消息调研
相关资料 背景:微信模板消息已正式下架,改为订阅消息,详情如下: 服务变更通知 订阅消息:订阅消息相关内容如下: 订阅消息 接口设计 获取接口访问凭证 :根据appId和secret获取接口访问凭证a ...
随机推荐
- Angularjs实现下拉列表排序
<select class="form-control underline" ng-model="reportform.score" ng-options ...
- scrollTop、scrollHeight与clientHeight
MDN上概念 scrollTop:获取或设置一个元素的内容垂直滚动的像素数. scrollHeight:一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容. clientHeight:元素内部 ...
- Linux驱动实践:中断处理函数如何【发送信号】给应用层?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- Solon 开发,三、构建一个Bean的三种方式
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- 【Java】GUI编程
GUI编程 前言 某koukou老师的任务罢了,好在狂神老师居然有GUI的课,只能说是有救星了. [狂神说Java]GUI编程入门到游戏实战 最好笑的是,老师要求掌握的居然是14年的知识,就连狂神在上 ...
- dgv 自动换行
//设置自动换行 dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //设置自动调整高度 dgv.AutoSizeRowsMode ...
- java之类的抽取与对象的创建
Java语言之类的抽取 前言:世界由什么组成?This is a question.有人说是原子.分子,有人说是山川草木. 诚然,一千个人眼中有一千个哈姆雷特.而在程序员眼中,万物皆对象. 定义: 在 ...
- Android开发 定时任务清理数据
原文地址:Android开发 定时任务清理数据 | Stars-One的杂货小窝 公司项目,需要整定时任务,对数据进行清理,需要在每天凌晨0:00进行数据的清理,使用了Alarm和广播的方式来实现 P ...
- 多线程-其他方法-join等
1 package multithread4; 2 3 /* 4 * toString():返回该线程的字符串表现形式,包括线程名称.优先级和线程组 5 * Thread[Thread-0,5,mai ...
- Java中四种访问权限总结
一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...