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 相关文章推荐
表单的一些基本用法与技巧
Jul 15 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
用jQuery中的ajax分页实现代码
Sep 20 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
jQuery的animate函数实现图文切换动画效果
May 03 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
Nov 15 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
Nov 30 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
Vue-cli创建项目从单页面到多页面的方法
Sep 20 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
用jquery获取select标签中选中的option值及文本的示例
Jan 25 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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
php给数组赋值的实例方法
2019/09/26 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
微信小程序 跳转方式总结
2017/04/20 Javascript
angular5 子组件监听父组件传入值的变化方法
2018/09/30 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
速记Python布尔值
2017/11/09 Python
Python类继承和多态原理解析
2020/02/05 Python
python中可以声明变量类型吗
2020/06/18 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
财务会计人员岗位职责
2013/11/30 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
小学教师年度个人总结
2015/02/05 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
python自动化八大定位元素讲解
2021/07/09 Python