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生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
javascript实现简单的ajax封装示例
Dec 28 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
Jul 23 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 jQuery
Vue项目实现换肤功能的一种方案分析
Aug 28 Javascript
使用vue实现通过变量动态拼接url
Jul 22 Javascript
用js实现放大镜效果
Oct 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
在线增减.htpasswd内的用户
2006/10/09 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
jquery cookie插件代码类
2009/05/26 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
vue实现计算器功能
2020/02/22 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
python 同时读取多个文件的例子
2019/07/16 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
详解Python绘图Turtle库
2019/10/12 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python opencv进行图像拼接
2020/03/27 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
中学生家长评语大全
2014/04/16 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
银行奉献演讲稿
2014/09/16 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
党校培训学习心得体会
2016/01/06 职场文书
《我是什么》教学反思
2016/02/16 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis