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 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
轻松创建nodejs服务器(4):路由
Dec 18 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
NodeJs生成sitemap站点地图的方法示例
Jun 11 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
PDO::query讲解
2019/01/29 PHP
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
理解JS绑定事件
2016/01/19 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
基于vue.js无缝滚动效果
2018/01/25 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
深入理解Vue 的钩子函数
2018/09/05 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python得到windows自启动列表的方法
2018/10/14 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
Python函数生成器原理及使用详解
2020/03/12 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
常见的软件开发流程有哪些
2015/11/14 面试题
教师自我评价范文
2013/12/16 职场文书
销售助理岗位职责
2014/02/21 职场文书
禁止酒驾标语
2014/06/25 职场文书