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打包工具整合到鼠标右键的方法
May 11 NodeJs
NodeJS Express框架中处理404页面一个方式
May 28 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 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
第十四节 命名空间 [14]
2006/10/09 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
js获取div高度的代码
2008/08/09 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
简单的Python2.7编程初学经验总结
2015/04/01 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
Python中for循环控制语句用法实例
2015/06/02 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
python 实现视频 图像帧提取
2019/12/10 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
学python最电脑配置有要求么
2020/07/05 Python
Python 如何实现访问者模式
2020/07/28 Python
python中操作文件的模块的方法总结
2021/02/04 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
工程售后服务承诺书
2014/05/21 职场文书
总经理任命书范本
2014/06/05 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
医院志愿者活动总结
2015/05/06 职场文书
Nginx四层负载均衡的配置指南
2021/06/11 Servers
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技