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(二)--- Node.js事件模块
May 21 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
基于NodeJS的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 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数据类型之布尔型的介绍
2013/04/28 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
重定向实现代码
2006/11/20 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python reduce()函数的用法小结
2017/11/15 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python pandas模块基础学习详解
2019/07/03 Python
详解Python time库的使用
2019/10/10 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
python实现指定ip端口扫描方式
2019/12/17 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
ktv总经理岗位职责
2014/02/17 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript