前端规则:读取 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 展示。 |
字段支持(当前阶段)
支持:
initData;initDataUnsafe中:query_id、auth_date、hash、chat_type、start_param,以及核心user/chat字段。部分支持:
initDataUnsafe对象结构与user/chat子集。暂不支持:运行时元数据、视图状态、原生 UI 控件(BackButton/MainButton)、存储/设备 API,以及
sendData、openLink、弹窗、扫码等方法——不要依赖客户端回流。
安全必做
绝不把 bot token 写进前端代码、WebView 存储、URL、日志或分析。
把原始
initData发到后端,验签后再信任任何字段。
相关文章
仅当你的 MPChat 客户端版本明确声明支持时,才通过 window.MpChat.WebApp.call(name, params) 调用原生方法。
