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函数模式详解
Nov 07 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 Javascript
JavaScript操作选择对象的简单实例
May 16 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
node通过npm写一个cli命令行工具
Oct 12 Javascript
元素全屏的设置与监听实例
Nov 28 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 Javascript
关于node-bindings无法在Electron中使用的解决办法
Dec 18 Javascript
vue+iview 兼容IE11浏览器的实现方法
Jan 07 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
Sep 02 Javascript
Vue如何基于es6导入外部js文件
May 15 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 中执行系统外部命令
2006/10/09 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
php实现登录页面的简单实例
2019/09/29 PHP
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
详解Python流程控制语句
2020/10/28 Python
英语文学专业学生的自我评价
2013/10/31 职场文书
销售经理岗位职责
2014/03/16 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
经典爱情感言
2015/08/03 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js