tg/tgwebvalid

使用PHP轻松验证您的网站上的Telegram登录小部件和Telegram迷你应用程序用户

v4.2.4 2024-05-18 03:36 UTC

This package is auto-updated.

Last update: 2024-09-26 05:06:32 UTC


README

Testing Status Minimum PHP Version Latest version License

Documentation StandWithUkraine StandWithUkraine

StandWithUkraine

关于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 中发现安全漏洞,请创建一个问题并提供详细描述。所有安全漏洞都将立即修复。提交拉取请求也是欢迎的。

协助

如果您愿意加入项目的开发和改进,我们将非常高兴。您可以通过创建一个问题和/或提交拉取请求来参与。

许可证

TgWebValid - 是在MIT许可下提供的开源软件。有关更多信息,请参阅许可证文件