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 学习笔记(十二) dom
Jan 21 Javascript
理解JSON:3分钟课程
Oct 28 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
jQuery中:lt选择器用法实例
Dec 29 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
JavaScript数组迭代方法
Mar 03 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
Feb 23 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 jQuery
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
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执行定时任务的实现思路
2015/12/21 PHP
PHP 断点续传实例详解
2017/11/11 PHP
php DES加密算法实例分析
2019/09/18 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
客服服务心得体会
2013/12/30 职场文书
会议欢迎标语
2014/06/30 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
旷课检讨书500字
2014/10/14 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
公司员工管理制度
2015/08/04 职场文书