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+express+html5 实现拖拽上传
Aug 08 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
Sep 19 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
nodejs实现聊天机器人功能
Sep 19 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
分享几个超级震憾的图片特效
2012/01/08 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
React 子组件向父组件传值的方法
2017/07/24 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
python字符串查找函数的用法详解
2019/07/08 Python
Python短信轰炸的代码
2020/03/25 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
职业女性的职业规划
2014/03/04 职场文书
合作经营协议书范本
2014/04/17 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
小学生安全保证书
2015/05/09 职场文书
公司规章制度范本
2015/08/03 职场文书
护理工作心得体会
2016/01/22 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL