zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

微信公众号开发之微信服务器向我们的服务器都发了什么

服务器微信开发 什么 我们 公众
2023-09-11 14:19:18 时间

简介

微信服务器向我们的服务器一般发两种,一种是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的页面扫描二维码

在这里插入图片描述

  1. 扫描之后会有一个公众号
  2. 关注公众号,并进行测试
  3. 我们在关注的公众号中发一个 微信公众号测试

我们服务器端就接收到了微信服务器发送的内容
在这里插入图片描述
4. 但是,我们会发现法一次信息,我们写的接口相当于调用了好几次,这是因为我们的开发者服务器没有想微信服务器发送响应,我们尽量发送一个响应,比如写上res.send(""),等真正有返回数据的时候在去掉
5. 然后我们会发现有一个openid,这个其实就是用户的id

参数

因为是POST请求所有的参数应该在body中,但是他是一个流式的数据,我们需要编写一个函数去实现流式的数据的读取