简介
微信服务器向我们的服务器一般发两种,一种是GET请求,一种是POST请求
- GET请求
- 一般用来验证服务器的有效性
- POST请求
- 一般用来:当有用户发送消息的时候,微信会同步发送消息到我们的服务器
代码
auth.js
const sha1 = require("sha1")
const config = require("../config")
module.exports = () => {
return (req,res,next) => {
const {signature,echostr,timestamp,nonce} = req.query
const {token} = config
const str = [token,timestamp,nonce].sort().join("")
const sha1str = sha1(str)
if(req.method === "GET"){
// GET请求用于验证服务器的有效性
if(sha1str == signature){
res.set("Content-Type","text/plain");
res.send(echostr);
}else{
res.send(false)
}
}else if(req.method === "POST"){
// POST用于接收用户发送的消息
if(sha1str != signature){
// post请求不是来源于微信
res.send("error")
return
}
console.log(req.query);
}
}
}
这里打印查询字符串是因为无论post还是get他都会携带查询字符串参数
添加测试号
验证服务器的有效性 点击 之后我们要添加测试号,在你填写token的页面扫描二维码
- 扫描之后会有一个公众号
- 关注公众号,并进行测试
- 我们在关注的公众号中发一个
微信公众号测试
我们服务器端就接收到了微信服务器发送的内容
4. 但是,我们会发现法一次信息,我们写的接口相当于调用了好几次,这是因为我们的开发者服务器没有想微信服务器发送响应,我们尽量发送一个响应,比如写上res.send("")
,等真正有返回数据的时候在去掉
5. 然后我们会发现有一个openid
,这个其实就是用户的id
参数
因为是POST请求所有的参数应该在body中,但是他是一个流式的数据,我们需要编写一个函数去实现流式的数据的读取