前言

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

原理

陶瓷文档已经非常明确写出了规则, 在微信的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, 否则返回空.

THE END
评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

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

购买将消耗【10

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

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

2024年10月

新增

新增

新增

新增

新增

新增

新增

新增

新增

新增