You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不关闭Telegram迷你应用的前提下安全向Django+pyTelegramBotAPI传数据

解决Telegram迷你应用POST请求传递用户ID的问题

核心思路:利用Telegram WebApp初始化数据

Telegram在迷你应用启动时会自动向前端注入初始化数据,里面包含用户的Telegram ID等关键信息,直接用这份数据就能完成身份标识,无需额外验证流程。

步骤1:前端获取用户ID

在迷你应用的前端代码里,直接从Telegram注入的全局对象中提取用户ID:

// 从Telegram提供的全局对象中获取用户ID
const userId = window.Telegram.WebApp.initDataUnsafe.user.id;

说明:initDataUnsafe是未加密的原始数据,若需要更高安全性,可使用window.Telegram.WebApp.initData(加密字符串),后端需用你的Bot Token解密验证;如果仅需识别用户身份,initDataUnsafe足够满足需求。

步骤2:POST请求携带用户ID

把获取到的userId作为请求参数的一部分,随POST请求发送给后端:

// 构造要传输的数据
const postData = {
  userId: userId,
  // 其他你需要传递的业务数据
  payload: "your_content_here"
};

// 发送POST请求到后端接口
fetch('/your_backend_api_path', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(postData),
})
.then(res => res.json())
.then(result => {
  console.log('数据传输成功:', result);
})
.catch(err => {
  console.error('传输失败:', err);
});

步骤3:后端接收与可选验证

如果要确保请求来自合法Telegram用户,后端可以对initData做验证:

  1. 前端同时把window.Telegram.WebApp.initData字符串发送到后端
  2. 后端按照Telegram官方规则,用你的Bot Token验证该字符串的合法性,验证通过后再提取用户ID

关于WebApp.sendData导致应用关闭的说明

WebApp.sendData的设计逻辑就是传输数据后自动关闭迷你应用,这是它的默认行为,所以如果不想关闭应用,改用普通HTTP请求(如POST)确实是正确的替代方案。


内容的提问来源于stack exchange,提问作者Expie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:42:02