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 04 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
Nodejs 识别图片类型的方法
Aug 15 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
详解python进行mp3格式判断
2016/12/23 Python
Python字符串的常见操作实例小结
2019/04/08 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
2016年班主任新年寄语
2015/08/18 职场文书