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学习小结(一)
Jul 06 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
nodejs实现遍历文件夹并统计文件大小
May 28 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
nodejs body-parser 解析post数据实例
Jul 26 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
监控Nodejs的性能实例代码
Jul 02 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中转义mysql语句的实现代码
2011/06/24 PHP
给ECShop添加最新评论
2015/01/07 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
JS实现放烟花效果
2020/03/10 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
Python学习小技巧总结
2018/06/10 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
什么是View State?
2013/01/27 面试题
How to spawning asynchronous work in J2EE
2016/08/29 面试题
什么是servlet链?
2014/07/13 面试题
应届毕业生求职信范文
2014/05/08 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers