赞
踩
验证服务器的有效性,需要微信服务器知道开发者服务器是哪个,也需要开发者服务器 验证消息是否来自微信服务器。
对于微信服务器知道开发者服务器是哪个,可以在公众号管理页面上填写 url
开发者服务器地址,以及填写token
,token
参与微信签名加密的一个参数。
对于开发者服务器 验证消息是否来自微信服务器,目的是计算得出 signature
微信加密签名,和微信传递过来的 signature
进行对比,如果一样,说明消息来自于微信服务器,如果不一样,说明不是微信服务器发送的消息,所以可以分析过程如下:
timestamp
、token
、nonce
) 按照字典序排序并组合在一起形成一个数组sha1
加密signature
,和微信发送过来的进行对比。如果一样,说明消息来自于微信服务器,返回 echostr
给服务器。如果不一样,说明不是微信服务器发送的消息,返回 error
。app.js
文件中,通过 npm i express
和 npm i sha1
命令分别下载 express
和 sha1
,并且进行引入,代码如下所示:const express = require('express')
const sha1 = require('sha1')
app.js
中,创建 app
应用对象,并且定义配置对象,配置对象包括 token
、appID
和 appsecret
,代码如下所示:const app = express()
const config = {
token: 'abcd',
appID: '1234abcd',
appsecret: 'abcdefg2w3d'
}
app.use
,传入 (req, res, next)
,可以得到一个req.query
,里面包括四个值,分别是signature
、echostr
、timestamp
和nonce
,如下所示:signature: 微信的加密签名,结合你的token
,timestamp
和nonce
经过某种算法生成的
echostr: 微信的随机字符串,微信后台随机生成的
timestamp: 微信的发送请求时间戳,对应当前时间
nonce: 微信的随机数字,微信后台随机生成的
req.query
中得到signature
、echostr
、timestamp
和nonce
,得到的值也是微信服务器提交的参数,从 config
中得到 token
。第一步,将参与微信加密签名的三个参数 (timestamp
、token
、nonce
) 安装字典序排序并组合在一起形成一个数组。第二步,将数组里所有参数拼接成一个字符串,进行 sha1
加密。第三步,加密完成后就生成了一个 signature
,和微信发送过来的进行对比。如果一样,说明消息来自于微信服务器,返回 echostr
给服务器。如果不一样,说明不是微信服务器发送的消息,返回 error
,代码如下所示:app.use((req, res, next) => { console.log(req.query) const {signature, echostr, timestamp, nonce } = req.query const { token } = config const arr = [timestamp, token, nonce] const arrSort = arr.sort() console.log(arrSort) const str = arr.join('') console.log(str) const sha1Str = sha1(str) console.log(sha1Str) if (sha1Str === signature) { res.send(echostr) } else { res.end('error') } })
app.listen(3000, () => console.log('服务器启动成功了'))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。