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和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 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调试函数和日志记录函数分享
2015/01/31 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
js+canvas实现画板功能
2020/09/13 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
理解python中生成器用法
2017/12/20 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
django form和field具体方法和属性说明
2020/07/09 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
大学生自我鉴定
2013/12/08 职场文书
出国考察邀请函
2014/01/21 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
消费者投诉书范文
2015/07/02 职场文书
小学校园广播稿
2015/08/18 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
Python自动化测试PO模型封装过程详解
2021/06/22 Python
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技
一文搞懂MySQL索引页结构
2022/02/28 MySQL