node.js微信小程序配置消息推送的实现


Posted in Javascript onFebruary 13, 2019

在开发微信小程序时,有一个消息推送,它的解释是这样的。

消息推送具体的内容是下面的这个网址   https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html,他介绍的也还可以,就是我这里换成了node代码。

消息推送

启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中。

在微信小程序的首页开发里面,开发设置中,微信的官网中,介绍的也还可以,php代码写的差不多也能了解什么意思,但是其中没有告诉我们要把echostr这个参数在接口中返回出来,所以导致我测试了半天都是那个Token验证失败。

写一下学习记录吧,方便后来的人遇到同样的问题,也方便自己以后查阅。

node.js微信小程序配置消息推送的实现

这个里面的url服务器地址就是自己的地址(上面那个是我随便写的),后面接上自己的接口,比如我的就是 /token,当你点击提交的时候,会发现在服务器中会有如下的get请求

node.js微信小程序配置消息推送的实现

避免有些人看不清楚上面的我在这里再用代码重新写一下上面的东西。

GET /checkPushMsg?signature=db6e0c25b7743d8dd7ebfda1db6c742a762a2f37&echostr=1712804002525306855×tamp=1549949926&nonce=982754662 200 1.321 ms - 46

其中的各个参数微信官网中介绍的也非常的详细。

node.js微信小程序配置消息推送的实现

开发者通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

  • 将token、timestamp、nonce三个参数进行字典序排序
  • 将三个参数字符串拼接成一个字符串进行sha1加密
  • 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

验证URL有效性成功后即接入生效,成为开发者。

检验signature的node.js示例代码:

/*
 验证服务器推送url地址
 开发者提交信息后,微信服务器将发送GET请求到填写的服务器URL上,GET请求携带参数如下
   @params signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数,nonce参数
   @params timestamp  时间戳
   @params nonce  随机数
   @params echostr  随机字符串
*/
exports.check_push = (req, res) => {
 console.log(req.query);
 let signature = req.query.signature,
   timestamp = req.query.timestamp,
   nonce = req.query.nonce,
   echostr = req.query.echostr;
 let a = crypto.createHash('sha1').update([pushToken, timestamp, nonce].sort().join('')).digest('hex'); // 这里的pushToken就是在上面的那里配置的Token

 if(a == signature){
  // 如果验证成功则原封不动的返回
  res.send(echostr);
 }else{
  res.send({
   status: 400,
   data: "check msg error"
  })
 }
};

其中遇到的两个问题,上面已经说了,这里再说一下这两个问题。

其中一个是把 token、timestamp、nonce三个参数进行字典序排序,当时想自己写一个方法,写了好久发现有点难受,所以在网上找了一些东西,发现那个 数组的sort方法不传递参数就是那个 默认字符编码排序,所以就非常简单了,加密直接用到crypto模块

另外一个就是微信都没有告诉我们要把那个echostr返回出去,虽然他的意思就是那个意思。。 这样就可以配置成功了。

如果你同样遇到了这个问题,看了我的文章解决了,我会非常高兴。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
如何用javascript去掉字符串里的所有空格
Feb 08 Javascript
javascript中利用数组实现的循环队列代码
Jan 24 Javascript
Javascript实现的鼠标经过时播放声音
May 18 Javascript
jquery $("#variable") 循环改变variable的值示例
Feb 23 Javascript
JS解析XML实例分析
Jan 30 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
angular2使用简单介绍
Mar 01 Javascript
jQuery事件用法详解
Oct 06 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
vue+element树组件 实现树懒加载的过程详解
Oct 21 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 #Javascript
Jquery实现无缝向上循环滚动列表的特效
Feb 13 #jQuery
vuex实现的简单购物车功能示例
Feb 13 #Javascript
jquery无缝图片轮播组件封装
Nov 25 #jQuery
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 #Javascript
vue写h5页面的方法总结
Feb 12 #Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 #Javascript
You might like
PHP无限分类的类
2007/01/02 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
js使用eval解析json(js中使用json)
2014/01/17 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
js实现内置计时器
2019/12/16 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python入门篇之文件
2014/10/20 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
python difflib模块示例讲解
2017/09/13 Python
python实现分页效果
2017/10/25 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
大学应届生求职简历的自我评价
2013/10/08 职场文书
大学生实习思想汇报
2014/01/12 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
报关报检委托书
2014/04/08 职场文书
安全生产计划书
2014/05/04 职场文书
优秀家长自荐材料
2014/08/26 职场文书
学习教师法的心得体会
2014/09/03 职场文书
财务检查整改报告
2014/11/06 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书