您好,欢迎来到微智科技网。
搜索
您的当前位置:首页node.js微信小程序配置消息推送的实现

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返回出去,虽然他的意思就是那个意思。 这样就可以配置成功了。

    如果你同样遇到了这个问题,看了我的文章解决了,我会非常高兴。

    Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务