tg / tgwebvalid
使用PHP轻松验证您的网站上的Telegram登录小部件和Telegram迷你应用程序用户
Requires
- php: ^8.2
- nesbot/carbon: ^2.67|^3.2
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6
README
关于TgWebValid
他们说我们很酷 😎
⭐️ 支持我们,在GitHub上给我们一个星标,并成为我们的赞助商 😊
🙏 如果有什么东西不起作用或您需要额外的功能,请在GitHub上告诉我们
用户身份验证通过加密接收的原始用户数据,并将其与Telegram提供的哈希值进行比较。失败检查可以等同于尝试绕过或破解系统的可能尝试。
该库验证Telegram登录小部件和Telegram网页应用程序用户
警告
:仅在成功验证后使用用户数据
为了快速安全地验证用户,我们建议遵循以下简单步骤
安装
您可以通过执行以下命令通过composer包管理器安装TgWebValid库:
composer require tg/tgwebvalid
添加--no-dev
标志以仅安装运行生产环境所需的项目依赖项。
使用
您需要做的第一件事是在TgWebValid类的构造函数中设置代表默认身份验证执行的Telegram机器人的令牌,并将结果存储在一个变量中。
此外,如果您希望在验证错误时抛出异常,请将第二个参数设置为true。但请确保使用try catch
结构
<?php use TgWebValid\TgWebValid; include './vendor/autoload.php'; $tgWebValid = new TgWebValid('TELEGRAM_BOT_TOKEN', false);
如果您的项目使用多个机器人,您可以轻松地与它们交互,只需将它们全部添加即可
<?php $tgWebValid->addBot('secondary', 'TELEGRAM_BOT_TOKEN_2'); $tgWebValid->addBot('minor', 'TELEGRAM_BOT_TOKEN_3');
让机器人工作很简单。指定要与之合作的机器人的名称,或者留空以获取默认机器人
$bot = $tgWebValid->bot('minor');
接下来,您需要决定您需要进行的身份验证类型。
Telegram网页应用程序身份验证
要执行此类型验证,您应使用validateInitData
方法。该方法接受用于处理的数据参数。如果验证成功,您将返回一个包含数据的InitData
对象,或者如果验证失败,则返回false
。
使用第二个参数启用或禁用失败验证时的异常
$initData = $bot->validateInitData('query_id=...'); if (!$initData) { // validation fails } /** * The initData object can contain the following data: */ // Time opening a web application $initData->authDate; // An object containing data about the current user $initData->user; // May contain a chat partner data object $initData->receiver; // May contain an object with chat data $initData->chat; // and other data
注意
。根据情况,某些数据存在,因此有时它可以是数据或数据对象而不是null
。更多详细信息请参阅Telegram官方文档
Telegram登录小部件身份验证
要执行此类型检查,您应使用validateLoginWidget
方法。该方法接受一个包含原始用户数据的数组。如果验证成功,您将返回一个包含数据的LoginWidget
对象,或者如果验证失败,则返回false
。
使用第二个参数启用或禁用失败验证时的异常
$loginWidget = $bot->validateLoginWidget([ 'auth_date' => 1679130118, 'first_name' => 'Сергій', // other fields ]); if (!$loginWidget) { // validation fails } /** * The LoginWidget object can contain the following data: */ // User token $loginWidget->id; // User first name $loginWidget->firstName; // Username $loginWidget->username; // Link to profile photo $loginWidget->photoUrl; // Authorization time $loginWidget->authDate; // and other data
注意
。根据情况,某些数据存在,因此有时它可以是数据或数据对象而不是null
。
完整示例
<?php use TgWebValid\TgWebValid; use TgWebValid\Exceptions\BotException; use TgWebValid\Exceptions\ValidationException; use Exception; include './vendor/autoload.php'; try { $tgWebValid = new TgWebValid('TELEGRAM_BOT_TOKEN', true); // Add bots only when needed $tgWebValid->addBot('secondary', 'TELEGRAM_BOT_TOKEN_2'); $tgWebValid->addBot('minor', 'TELEGRAM_BOT_TOKEN_3'); $initData = $tgWebValid->bot()->validateInitData('query_id=...'); var_dump($initData); } catch (ValidationException $e) { // Verification failed } catch (BotException $e) { // The bot name is incorrect } catch (Exception $e) { // Other exceptions }
此外
我们的库是自足的,因此它可以用于任何框架,或者在没有它们的情况下使用。
安全
如果在 TgWebValid 中发现安全漏洞,请创建一个问题并提供详细描述。所有安全漏洞都将立即修复。提交拉取请求也是欢迎的。
协助
如果您愿意加入项目的开发和改进,我们将非常高兴。您可以通过创建一个问题和/或提交拉取请求来参与。