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 npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 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加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Python实现手势识别
2020/10/21 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
请假条怎么写
2014/04/10 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
南京南京观后感
2015/06/02 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技