Nodejs 微信小程序消息推送的实现


Posted in NodeJs onJanuary 20, 2021

选择或创建订阅消息模板

登录到微信小程序里面找到功能->订阅消息。可以在公共模板库里选择需要的模板,如果没有找到自己需要的也可以自己创建然后等待审核、

选择完模板查看详情会得到模板ID,以及发送推送时需要的字段、

Nodejs 微信小程序消息推送的实现

小程序发送订阅的请求

需要用到上一步获取的模板Id

// 小程序
<Text className='rights-buy' onClick={this.messageSubmit}>
 入驻申请
</Text>

// 入驻申请消息订阅
messageSubmit = () => {
 Taro.requestSubscribeMessage({
  tmplIds: ['SuGMwqyYY9cocuP-LxfElcM3a7ITaF34lKNux6EaE9'],
  success: (res) => {
   // 调用服务端接口,在数据库写入一条订阅记录
   // this.subscribeDeal()
  }
 })
}

服务端发起推送

推送一般有两种

  • 手动触发、
  • 还有就是订阅消息后,达到某个条件自动触发推送、

对于第一种情况,就直接调用微信的推送接口就好了。第二中情况稍微麻烦一点,可以加一个定时的任务,或者使用相关的队列库、等条件符合了再触发、

需要注意的地方

  • 发送推送的时候需要用户的openid,以及模板id。具体的推送内容字段,在第一步模板详情里面可以查看、
  • 调用微信推送的接口的时候需要access_token,最好缓存一下,频繁调用会有失效的问题、

获取access_token并缓存

async getAccessToken () {
 const { appId, appSecert, host } = this.app.config.idolWxAConfig;

 return new Promise(async (resolve) => {
  const currentTime = new Date().getTime()

  const redisToken = await this.app.redis.get('wxtoken').get('token') || '{access_token: "", expries_time: 0}'
  const accessTokenJson = JSON.parse(redisToken)

  if (accessTokenJson.access_token === '' || accessTokenJson.expries_time < currentTime) {
   const res = await this.ctx.curl(`${host}/cgi-bin/token?appid=${appId}&secret=${appSecert}&grant_type=client_credential`, { dataType: 'json' })

   if (res.data) {

    accessTokenJson.access_token = res.data.access_token
    accessTokenJson.expries_time = new Date().getTime() + (parseInt(res.data.expires_in) - 200) * 1000

    await this.app.redis.get('wxtoken').set('token', JSON.stringify(accessTokenJson))
    resolve(accessTokenJson)
   }
  } else {
   resolve(accessTokenJson)
  }
 })
}

向微信发送推送请求

async sendSubscribeMsg (openid) {

 let requestData = {
  "touser": `${openid}`,
  "template_id": "SuGMwqyYY9cocuP-LxfElcM3a7ITaF34lKNux6EaE9",
  "page": `/pages/certification/index`,
  "data": {
    "phrase2": {
     "value": `审核通过`
    },
    "thing3": {
     "value": `您的申请已经审核通过`
    }
  }
 }

 const { host } = this.app.config.idolWxAConfig;
 // 获取access_toekn
 const tokenJson = await this.ctx.service.wx.getAccessToken()
 const res = await this.ctx.curl(`${host}/cgi-bin/message/subscribe/send?access_token=${tokenJson.access_token}
 `, {
  method: 'POST',
  contentType: 'json',
  data: requestData,
  dataType: 'json'
 });

 if (res.data.errmsg === 'ok') {
  console.log('========推送成功========')
  // TODO
 } else {
  console.log('========推送失败========')
  // TODO
 }
}

到此这篇关于Nodejs 微信小程序消息推送的实现的文章就介绍到这了,更多相关Nodejs小程序消息推送内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

NodeJs 相关文章推荐
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 #NodeJs
nodejs中的异步编程知识点详解
Jan 17 #NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 #NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 #NodeJs
NodeJS配置CORS实现过程详解
Dec 02 #NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 #NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 #NodeJs
You might like
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP代码加密的方法总结
2020/03/13 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
Node.js实现文件上传
2016/07/05 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python 实现倒排索引的方法
2018/12/25 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
大学生期末自我鉴定
2014/02/01 职场文书
贷款委托书范本
2014/04/08 职场文书
爱我中华演讲稿
2014/05/20 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
应届生找工作求职信
2014/06/24 职场文书
解决Oracle数据库用户密码过期
2022/05/11 Oracle