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分别取得每行最后一列和最后一行的示例代码
Aug 18 Javascript
JS如何实现文本框随文本的长度而增长
Jul 30 Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 Javascript
jQuery UI Bootstrap是什么?
Jun 17 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
微信小程序movable view移动图片和双指缩放实例代码
Aug 08 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
Vue项目全局配置微信分享思路详解
May 04 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
原生js滑动轮播封装
Jul 31 Javascript
Bootstrap FileInput实现图片上传功能
Jan 28 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中处理模拟rewrite 效果
2006/12/09 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
Python读写Excel文件的实例
2013/11/01 Python
Python 字典(Dictionary)操作详解
2014/03/11 Python
Django在win10下的安装并创建工程
2017/11/20 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python 绘制场景热力图的示例
2020/09/23 Python
天鹅的故事教学反思
2014/02/04 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
拓展策划方案
2014/06/03 职场文书
地球一小时宣传标语
2014/06/24 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
计生个人工作总结
2015/02/28 职场文书
首都博物馆观后感
2015/06/05 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
运动会宣传稿100字
2015/07/23 职场文书
教师岗位说明书
2015/09/30 职场文书
优质护理服务心得体会
2016/01/22 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang