const crypto = require('crypto'); const path = require('path'); const url = require('url'); //import config const config = require('../../config'); //进行sha1加密 function sha1(str) { var shasum = crypto.createHash("sha1"); shasum.update(str); str = shasum.digest("hex"); return str; } function wechatAuth(req, res) { var query = url.parse(req.url, true).query; var signature = query.signature; var echostr = query.echostr; var timestamp = query['timestamp']; var nonce = query.nonce; var reqArray = [nonce, timestamp, config.token]; //对数组进行字典排序 reqArray.sort(); var sortStr = reqArray.join('');//连接数组 var sha1Str = sha1(sortStr); if (signature === sha1Str) { res.end(echostr); } else { res.end("false"); console.log("授权失败!"); } } module.exports = wechatAuth;
相信代码说的总是比我清楚,首先获取请求url中的四个参数,对nonce,timestamp, 和token进行字典排序也就是Array.sort(),然后进行字符串拼接,进行sha1加密,如果结果和signature相等则成功,(顺便说一句,其实直接返回echostr也是可以成功的,不过后面的请求就不太好办了?)。
这样来说接入应该就算是成功了。
首先github地址奉上:https://github.com/xiadd/shorthand