L01-验证服务器的有效性

1、在webstorm中打开文件夹wx_zwtx,在项目底下新建day01文件夹

2、接着day01下新建一个js文件,命名为验证服务器的有效性

3、打开终端,进入wx_zwtx根目录,输入npm init进行初始化,输入名称wechat_test、版本号1.0.0等一些信息,结束后会生成package.json文件

4、安装express

  • 终端输入npm i express

5、进入ngrok官网:www.ngrok.cc ,进行内网穿透,下载客户端,连接

6、将地址填写至申请的测试号的接口配置信息中

7、代码编写如下:

8、测试微信服务器提交过来的参数

  • 先运行服务器,再在网页上提交接口配置信息,观察控制台接收到的信息,结果如下:

9、分析

{
signature: ‘4b72756afd11a7533c01ade9ce2bcc306dbc0e4f’
echostr: ‘1592125008023124477’,
timestamp: ‘1631236605’,
nonce: ‘559763514’
}

  • signature:微信的加密签名
  • echostr:微信的随机字符串
  • timestamp:微信的发送请求时间戳
  • nonce:微信的随机数字

10、开发者服务器-验证消息是否来自于微信服务器

目的:计算得出signature微信加密签名,和微信传递过来的signature进行对比,如果一样,说明消息来自于微信服务器,如果不一致,说明不是微信服务器发来的消息

  • 将参与微信加密签名的三个参数(timestamp、nonce、token)按照字典序排序并组合在一起,形成一个数组
  • 将数组里所有参数拼接成一个字符串,进行sha1加密
  • 加密完成后就会生成一个signature,与微信服务器发来的进行对比
    • 如果一样,说明消息来自于微信服务器,返回echostr给微信服务器
    • 如果不一致,说明不是微信服务器发来的消息,返回error

11、定义配置对象

12、使用对象的解构赋值方法快捷的拿到参数

13、将参与微信加密签名的三个参数(timestamp、nonce、token)按照字典序排序并组合在一起,形成一个数组

14、将数组里所有参数拼接成一个字符串,进行sha1加密

  • 首先,终端输入npm i sha1,进行下载,并在代码中引入sha1模块,再拼接

15、加密完成后就会生成一个signature,与微信服务器发来的进行对比

  • 如果一样,说明消息来自于微信服务器,返回echostr给微信服务器
  • 如果不一致,说明不是微信服务器发来的消息,返回error

16、验证

  • 运行服务器,网页上点击提交,控制台观察结果(之前打印的参数我注释掉了),结果如下:

  • 分析:
    1、先将三个参数按照字典序进行排序,形成一个数组
    2、接着拼接成一个字符串,进行sha1加密
    3、最后与微信服务器发来的signature进行比对