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入门详解(多篇文章结合)
Mar 07 NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
NodeJs实现定时任务的示例代码
Dec 05 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 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+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
基于Python绘制个人足迹地图
2020/06/01 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
什么是方法的重载
2013/06/24 面试题
十一酒店活动方案
2014/02/20 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
反邪教教育心得体会
2016/01/15 职场文书
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL