如何从Telegram内嵌H5游戏中获取玩家的用户信息?
获取Telegram H5游戏内的用户信息解决方案
核心误区纠正
你提到「开始游戏」按钮的回调消息from字段是Bot,这是正常行为——该回调是Telegram转发的Bot触发事件,并非用户直接发送的请求,不能通过这个回调获取当前游玩用户的信息。
正确获取流程
确保游戏通过
sendGame方法发送
只有使用Telegram Bot API的sendGame接口发送的游戏消息,Telegram才会在用户打开游戏时注入用户信息。不要用普通的链接消息替代sendGame请求,否则不会触发参数注入。前端获取用户信息的正确方式
Telegram不会把用户信息直接拼在URL上,而是通过内置WebView的Telegram.WebApp对象注入数据。你需要在H5游戏中做以下操作:- 先引入Telegram WebApp脚本:
<script src="https://telegram.org/js/telegram-web-app.js"></script> - 初始化并获取用户信息:
// 告知Telegram WebApp页面已加载完成 window.Telegram.WebApp.ready(); // 获取用户信息(initDataUnsafe包含未验证的原始数据,适合前端快速获取) const currentUser = window.Telegram.WebApp.initDataUnsafe.user; // 可拿到的字段示例:user_id、first_name、username(可选)、last_name(可选) console.log("当前游玩用户:", currentUser);
- 先引入Telegram WebApp脚本:
后端验证信息合法性(推荐)
为了避免用户篡改前端数据,建议在后端验证信息真实性:- 从前端获取
initData(可通过window.Telegram.WebApp.initData拿到完整的参数字符串) - 验证逻辑:
- 将
initData按参数键名升序排序,拼接成key=value连接的字符串 - 使用Bot的token作为密钥,通过HMAC-SHA256算法对拼接字符串生成哈希值
- 将生成的哈希值与
initData中的hash参数对比,一致则信息合法
- 将
- 从前端获取
常见排查点
- 确认游戏是在Telegram内置WebView中打开,而非外部浏览器
- 检查
sendGame请求的game_short_name与BotFather中设置的游戏短名称完全一致 - 确保H5页面使用HTTPS协议(Telegram WebApp仅支持HTTPS)
内容的提问来源于stack exchange,提问作者yoyo
相关产品推荐
相关产品推荐

