我对 Telegram Bot API 有点陌生,在机器人中我想通过 Telegram Passport
验证用户的年龄我正在尝试重新创建他们的 Javascript SDK。该按钮出现并打开 Telegram Passport,但我收到错误
Could not get authorization form. PUBLIC_KEY_REQUIRED
我已经插入了我的公钥,但仍然收到错误消息。如果有人可以复制他们的例子并告诉我我做错了什么,那将是一个很大的帮助。
必须在 2 个地方提供公钥。
传递给 Telegram.Passport.createAuthButton 的AuthParameters 对象的 public_key 属性应设置为您的公钥。 我假设您在声明插入公钥时执行了此操作。
您还必须使用 BotFather 为您的机器人设置公钥。 用于启动 BotFather 进程的命令是/setpublickey。 当您输入该命令时,BotFather 会询问您该密钥应应用于哪个机器人,然后等待您将公钥粘贴到消息中。 如果一切顺利,BotFather 将回复“成功!公钥已更新。/help”。
当我将公钥放入 AuthParameters 时,我看到了与您描述的相同的错误消息,但未能将其上传到 BotFather。
电报
发生错误:
PUBLIC_KEY_INVALID
请注意如何放置
public_key
。这是一个适用于测试的示例, 由于
python-telegram-bot
的文档没有详细解释这一点,所以只是提到它(直到今天,2024年12月7日):
<?php
$tg_passport = empty($_GET["tg_passport"])? "":$_GET["tg_passport"];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title> Telegram passport (test1) </title>
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1" name="viewport">
</head>
<body>
<h1>Telegram passport (test1)</h1>
<?php
if ($tg_passport == "cancel") {
echo "Canceled!";
}
?>
<div id="telegram_passport_auth"></div>
</body>
<!--- Needs file from https://github.com/TelegramMessenger/TGPassportJsSDK downloaded --->
<script src="../telegram-passport.js"></script>
<script src="../uuid.min.js"></script>
<script>
"use strict";
var host = "https://your-host.net"
var nonce = uuid.v4(), callback_url = host+"/apps/telegram_passport_auth",
files_base_url = callback_url+"/files",
files_dir = callback_url+"/files_saved";
// Example of public key
var p_k="-----BEGIN PUBLIC KEY-----\n"+
"MIIBIjANBC\n"+
"mPPAR7busb\n"+
"TmxT4yQswX\n"+
"2TLg46ccdi\n"+
"Tbam9PQiw4\n"+
"Sb7Tqii9xl\n"+
"QQIAB\n"+
"-----END PUBLIC KEY-----\n";
Telegram.Passport.createAuthButton('telegram_passport_auth', {
// ROLL BOT:
bot_id: 999999999,
// WHAT DATA YOU WANT TO RECEIVE:
scope: {
data: [{
type: 'id_document',
selfie: true
}, 'address_document', 'phone_number', 'email'],
v: 1
},
// YOUR PUBLIC KEY
public_key: p_k,
// YOUR BOT WILL RECEIVE THIS DATA WITH THE REQUEST
nonce: nonce,
// TELEGRAM WILL SEND YOUR USER BACK TO THIS URL
callback_url: callback_url+"/?"
});
</script>
</html>
nonce
是使用uuid.min.js中的uuid.v4()生成的。也许这个细节影响或不影响错误:
PUBLIC_KEY_REQUIRED