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解析URL参数示例代码
Aug 12 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
文本框水印提示效果的简单实现代码
Feb 22 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
浅谈React + Webpack 构建打包优化
Jan 23 Javascript
webpack4+react多页面架构的实现
Oct 25 Javascript
Javascript实现秒表倒计时功能
Nov 17 Javascript
javascript合并两个数组最简单的实现方法
Sep 14 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
Jul 26 Javascript
vue中提示$index is not defined错误的解决方式
Sep 02 Javascript
详解vue 组件的实现原理
Nov 12 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+MySQL 制作简单的留言本
2009/11/02 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
PHP7 弃用功能
2021/03/09 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
详解JavaScript的变量
2019/04/04 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
python基础教程之面向对象的一些概念
2014/08/29 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python pandas时序处理相关功能详解
2019/07/03 Python
python logging日志模块原理及操作解析
2019/10/12 Python
python库matplotlib绘制坐标图
2019/10/18 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
文秘专业自荐信
2013/10/14 职场文书
司马光教学反思
2014/02/01 职场文书
文明餐桌活动方案
2014/02/11 职场文书
公司拓展活动方案
2014/02/13 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
人力资源求职信
2014/05/25 职场文书
幼儿园六一活动总结
2014/08/27 职场文书