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面向对象编程(一) 实例代码
Jun 25 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
Aug 07 Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 Javascript
关于编写性能高效的javascript事件的技术
Nov 28 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
Jan 20 Javascript
Underscore源码分析
Dec 30 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
Sep 14 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
微信小程序bindtap事件与冒泡阻止详解
Aug 08 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
Sep 12 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 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中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
Python下载懒人图库JavaScript特效
2015/05/28 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
提高python代码运行效率的一些建议
2020/09/29 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
利用python爬取有道词典的方法
2020/12/08 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
网上签名寄语活动留言
2014/01/18 职场文书
研讨会主持词
2014/04/02 职场文书
司法建议书范文
2014/05/13 职场文书
总经理致辞
2015/07/29 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书