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 相关文章推荐
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
May 18 Javascript
DWR实现模拟Google搜索效果实现原理及代码
Jan 30 Javascript
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
利用JS来控制键盘的上下左右键(示例代码)
Dec 14 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
Javascript Object 对象学习笔记
Dec 17 Javascript
浅谈jQuery为哪般去掉了浏览器检测
Aug 29 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
vue-router 起步步骤详解
Mar 26 Javascript
js图片查看器插件用法示例
Jun 22 Javascript
Node绑定全局TraceID的实现方法
Nov 14 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
Apr 17 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中实现简单的ACL 完结篇
2011/09/07 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
python正则分组的应用
2013/11/10 Python
在Python中使用模块的教程
2015/04/27 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
python实现画一颗树和一片森林
2018/06/25 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
python实现移动木板小游戏
2020/10/09 Python
环境科学专业个人求职信
2013/09/26 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
产品发布会策划方案
2014/05/12 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
2014年销售部工作总结
2014/12/01 职场文书