跳转到主要内容

打开 MiniApp 与前端 SDK(web_app 按钮、initData vs initDataUnsafe)

用 sendMessage 发送 MiniApp 入口按钮、加载 MPChat WebApp SDK,并正确读取 initData 与 initDataUnsafe,附当前字段支持范围。

前端规则:读取 initData(原始签名字符串)并发给后端验证。initDataUnsafe 仅用于 UI 展示,绝不能作为身份证明。


总览

打开 MiniApp 有两种方式:sendMessage 的 web_app 按钮,或直达链接。打开后,MPChat SDK 同步暴露初始化数据。

发送入口按钮

{
  "chat_id": "12345",
  "text": "Open Demo MiniApp",
  "reply_markup": {
    "inline_keyboard": [[
      { "text": "Open", "web_app": { "url": "https://mini.example.com/demo" } }
    ]]
  }
}

请求体无需 miniapp_id;服务端用 web_app.url 匹配当前 Bot 的 MiniApp entryUrl(或把最后一段路径当作 shortName)。

加载 SDK

<script src="https://mp.net/i/mpchat-web-app.js"></script>

const initData = window.MpChat.WebApp.initData;            // 签名字符串 -> 后端
const initDataUnsafe = window.MpChat.WebApp.initDataUnsafe; // 仅 UI,不可信

initData vs initDataUnsafe

数据

能否用于授权?

initData(原始签名字符串)

能——后端验签之后。

initDataUnsafe(解析对象)

不能——仅用于 UI 展示。

字段支持(当前阶段)

  • 支持:initDatainitDataUnsafe 中:query_idauth_datehashchat_typestart_param,以及核心 user/chat 字段。

  • 部分支持:initDataUnsafe 对象结构与 user/chat 子集。

  • 暂不支持:运行时元数据、视图状态、原生 UI 控件(BackButton/MainButton)、存储/设备 API,以及 sendDataopenLink、弹窗、扫码等方法——不要依赖客户端回流。

安全必做

  • 绝不把 bot token 写进前端代码、WebView 存储、URL、日志或分析。

  • 把原始 initData 发到后端,验签后再信任任何字段。

相关文章

仅当你的 MPChat 客户端版本明确声明支持时,才通过 window.MpChat.WebApp.call(name, params) 调用原生方法。

这是否解答了您的问题?