前言

陶瓷开发之前, 微信会发送一个信息来验证我们服务器. 我们接收到请求后按微信给定的规则进行处理, 之后返回微信想要的结果. 而且以后每次微信服务器对我们服务器发起请求后, 我们都应该进行验证, 以防止非微信服务器访问我们接口.

原理

陶瓷文档已经非常明确写出了规则, 在微信的get请求中会携带 timestamp, nonce, signature, echostr四个参数, 并且我们已经和微信约定了密匙token. 也就是通过这五个参数来验证.

验证规则: timestamp, nonce, toke按字典排序, 之后通过哈希加密, 会得到一个字符串, 如果该字符串和signature相等, 就说明是微信发送的信息. 如果我们确认后就要原样返回给微信echostr.

步骤

下面是koa的实现代码

async (ctx)=>{
  //我们在陶瓷上设置的密匙, 这个一定要和陶瓷设置的一致
  const token = config.weixin.token 
  //微信get请求传给我们的三个参数
  const signature = ctx.query.signature 
  const timestamp = ctx.query.timestamp 
  const nonce = ctx.query.nonce
  //按字典排序
  const str =  [token, timestamp, nonce].sort().join('')[
  //哈希加密
  const fingerprint = sha1(str)
  //签名和我们处理后的字符串相等则通过, 则原样返回echostr
  if(signature === fingerprint){
    ctx.body = ctx.query.echostr
  }
  //不通过则返回空
  ctx.body = ''
}

总结

整个流程是非常清晰的, 我们再来回顾下:

  1. 首先从请求中拿到 nonce,timestamp,signature, echostr 四个参数, 再拿到我们的密匙token. 总共五个参数.

  2. nonce,timestatmp,token根据字典排序后, 哈希加密.

  3. 对比加密后的字符串是否等于signature, 等于则原样返回echostr, 否则返回空.

开启精彩搜索

历史搜索

用户名或邮箱
密码
用户名
密码
重复密码
邮箱
注册
找回密码
注册 登录
邮箱
邮箱验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

新增

新增