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实用示例 缩址还原
Dec 28 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
nodejs中express入门和基础知识点学习
Sep 13 NodeJs
node快速搭建后台的实现步骤
Feb 18 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 变量类型的强制转换
2009/10/23 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
python反扒机制的5种解决方法
2021/02/06 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
活动总结的格式
2014/05/07 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
房屋租房协议书范本
2014/12/04 职场文书
大学生党性分析材料
2014/12/19 职场文书
四年级作文之植物
2019/09/20 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang