微信服务器配置 token验证失败
微信服务器配置 token验证失败
为微信公众号配置服务器时提示【token验证失败】
Author: Mon's_Works
注意事项
- 服务器URL不是任意网址都可以,需要是一个可以对请求做出特定响应的后端服务器;
- Token是任意值,不是access_token;
- 后端需要返回一个整数,而非字符串,这是后端开发时容易忽略的问题。
服务器实现
前端验证原理
在微信管理页面提交配置时,网页会向URL发起GET请求,包含若干参数,其中一个是echostr。
该请求期望服务器将echostr返回,如果返回值正确,则配置成功,否则失败。
后端实现步骤
1.后端收到请求时,从请求中获取signature, echostr, timestamp, nonce等4个参数;
2.利用所得参数,根据官方提供的计算方法进行验证,具体算法见下一节。
3.返回echostr,期望格式为整数,而非字符串。如果以字符串格式返回echostr,也会提示【token验证失败】。
4.理论上,如果只是测试,验证过程可以省略,直接返回echostr即可。
验证算法
官方示例采用Python 2,以下示例为Python 3,有所改动,注意甄别。
from fastapi import FastAPI import hashlib app = FastAPI() @app.get("/") async def root(signature: str = '', echostr: str = '', timestamp: str = '', nonce: str = ''): token = "与网页所填token一致" # 获取请求中的参数,计算验证 list = [token, timestamp, nonce] list.sort() sha1 = hashlib.sha1() sha1.update(list[0].encode('utf-8')) sha1.update(list[1].encode('utf-8')) sha1.update(list[2].encode('utf-8')) hashcode = sha1.hexdigest() if hashcode == signature: print('succeed') # 需返回数字,而非字符串 return int(echostr) else: print('failed') return 0
基本原理
利用token, timestamp, nonce三个值,计算出一个hashcode,与前端参数signature进行对比。
如果后端的token值,与网页所填写的保持一致,那么计算出来的hashcode就会与前端参数signature相同,否则就会不同,从而达到验证的目的。
示意图(官方)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)