//引入express模块
const express = require('express');
//引入sha1模块
const sha1 = require('sha1');
//创建app应用对象
const app = express();
//验证服务器有效性
/**
* 1.微信服务器知道开发者服务器是哪个
* -测试号管理页面上填写url开发者服务器地址
* -使用ngrok 内网穿透 将本地端口号开启的服务映射外网跨域访问一个地址
* -ngrok http 3000
* -填写token
* -参与微信签名加密的一个参数
* 2.开发者服务器 - 验证消息是否来自于微信服务器
*
*/
const config = {
token: 'hzz2020',
appID: 'wx7a136ffa436a1afe',
appsecret: '5b0f9a7ee095a79fedb2ac7f014cb661'
}
//接受处理所有消息
app.use((req, res, next) => {
//微信服务器提交的内容
console.log(req.query);
/*
参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
*/
const { signature, echostr, timestamp, nonce } = req.query;
const { token } = config;
//1.将参与微信加密签名的三个参数(timestamp,nonce,token)按照字典序排序并组合在一起形成一个数组
const arr = [timestamp, nonce, token];
const arrSort = arr.sort();
console.log(arrSort)
//2.将数组里所有参数拼接成一个字符串,进行sha1加密
const str = arr.join('');
console.log(str);
const sha1Str = sha1(str);
console.log(sha1Str);
//3.加密完成生成了一个signature,和微信发送过来的进行对比
if (sha1Str === signature) {
//如果一样,说明消息来自于微信服务器,返回echostr给微信服务器
res.send(echostr)
} else {
res.end('error');
}
})
//监听端口号
app.listen(3000, () => console.log('服务器启动成功了~'));
把代码放到一个js文件即可,用Node启动
此文件做测试来验证服务器的有效性
模块化后的代码: