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的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
Python threading多线程编程实例
2014/09/18 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python单链表简单实现代码
2016/04/27 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
基于Python实现简单学生管理系统
2020/07/24 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
外科实习自我鉴定
2013/10/06 职场文书
开水果连锁店创业计划书
2013/12/29 职场文书
致裁判员加油稿
2014/02/08 职场文书
精彩广告词大全
2014/03/19 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
英语读书笔记
2015/07/02 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
Python基础之pandas数据合并
2021/04/27 Python