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 ...
随机推荐
- SCALA-基础知识学习(一)
概述 本人开始学习scala的时候,是在使用和开发spark程序的时候,在此为了整理.记录和分享scala的基础知识,我写这篇关于scala的基础知识,希望与广大读者共同学习沟通进步.如果有些代码比较 ...
- windows下过安全狗
最近想着把过waf相关的整理一下,本次主要以安全狗4.0为例进行演示 准备工作 安全狗官网:http://free.safedog.cn/install_desc_website.html环境:Win ...
- Java中生成一个唯一值的方式
现总结几种生成一个唯一值的方式 第一种:采用nanoTime() // 理论上存在重复的可能,可以在后面再加上一个随机字符串 Random r = new Random(); for (int i = ...
- MATLAB中插值算法实现
%%%1.M文件%(1).以往少的程序可以在命令行窗口进行编码,但大量的程序编排到命令行窗口,%会有造成乱码的危险.(2).如果将命令编成程序存储在一个文件中(M文件),依次运行文件中的命令,则可以重 ...
- Javascript面向对象——创建对象、构造函数的原型
Javascript面向对象--创建对象.构造函数的原型 其实:JavaScript中的创建类,就是创建一个构造函数,在创建对象时用到new这个关键字, 一.创建对象 1.函数创建对象 functio ...
- [C语言基础] 数组与指针之间的引用
通过指针引用数组,通过数组引用指针,你搞明白了么?通过下面3种情形来了解一下数组和指针 Case 1. unsigned char arry[10]; unsigned char *ptr; unsi ...
- Cesium入门10 - 3D Tiles
Cesium入门10 - 3D Tiles Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们团队有时把Ces ...
- golang中的原子操作atomic包
1. 概念 原子操作 atomic 包 加锁操作涉及到内核态的上下文切换,比较耗时,代价高, 针对基本数据类型我们还可以使用原子操作来保证并发的安全, 因为原子操作是go语言提供的方法,我们在用户态就 ...
- gin中的重定向
package main import ( "github.com/gin-gonic/gin" ) func main() { // HTTP重定向很容易,内部.外部重定向均支持 ...
- ps -ef aux区别
第一点 -ef是System V展示风格,而aux是BSD风格. BSD风格 字段含义: USER:用户名称 PID:进程号 %CPU:进程占用CPU的百分比 %MEM:进程占用物理内 ...