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 相关文章推荐
js no-repeat写法 背景不重复
Mar 18 Javascript
javascript 异步页面查询实现代码(asp.net)
May 26 Javascript
如何使用Javascript正则表达式来格式化XML内容
Jul 04 Javascript
Jquery遍历节点的方法小集
Jan 22 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
Apr 06 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 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
smarty获得当前url的方法分享
2014/02/14 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
python 项目目录结构设置
2020/02/14 Python
简单了解Django项目应用创建过程
2020/07/06 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
文秘专业自荐信
2013/10/14 职场文书
酒店员工检讨书
2014/02/18 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android