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 win7下安装方法
May 24 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
nodejs实现套接字服务功能详解
Jun 21 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作的文本留言本的例子(一)
2006/10/09 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
PHP基础知识回顾
2012/08/16 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
JavaScript实现三级级联特效
2017/11/05 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
详解python开发环境搭建
2016/12/16 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
django如何自己创建一个中间件
2019/07/24 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
报社实习生自荐信
2014/01/24 职场文书
学校募捐倡议书
2014/05/14 职场文书
活动总结报告怎么写
2014/07/03 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
MySQL主从切换的超详细步骤
2022/06/28 MySQL