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的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
nodejs multer实现文件上传与下载
May 10 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
nodejs body-parser 解析post数据实例
Jul 26 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 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分页函数
2006/10/09 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python的迭代器与生成器实例详解
2014/07/16 Python
python 图像平移和旋转的实例
2019/01/10 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
大学生创业计划书
2014/08/14 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
学生会招新宣传语
2015/07/13 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android