1. Go to this page and download the library: Download tigusigalpa/tbank-id-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TBankAuthController;
Route::get('/auth/tbank', [TBankAuthController::class, 'redirect'])->name('tbank.login');
Route::get('/auth/tbank/callback', [TBankAuthController::class, 'callback'])->name('tbank.callback');
Route::post('/auth/tbank/logout', [TBankAuthController::class, 'logout'])->name('tbank.logout');
// app/Http/Controllers/TBankAuthController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Tigusigalpa\TBankID\Facades\TBankID;
use Tigusigalpa\TBankID\Exceptions\TBankIDException;
class TBankAuthController extends Controller
{
public function redirect(Request $request)
{
$state = bin2hex(random_bytes(16));
$request->session()->put('tbank_state', $state);
$authUrl = TBankID::getAuthorizationUrl(['openid', 'email', 'phone'], $state);
return redirect($authUrl);
}
public function callback(Request $request)
{
$code = $request->get('code');
$state = $request->get('state');
$sessionState = $request->session()->get('tbank_state');
if (!$code) {
return redirect('/')->with('error', 'Авторизация отменена');
}
if (!TBankID::verifyState($state, $sessionState)) {
return redirect('/')->with('error', 'Ошибка проверки безопасности');
}
try {
$tokenData = TBankID::getAccessToken($code);
$accessToken = $tokenData['access_token'];
$refreshToken = $tokenData['refresh_token'] ?? null;
$userInfo = TBankID::getUserInfo($accessToken);
$request->session()->put('tbank_access_token', $accessToken);
$request->session()->put('tbank_refresh_token', $refreshToken);
$request->session()->put('tbank_user', $userInfo);
return redirect('/dashboard')->with('success', 'Вы успешно авторизованы');
} catch (TBankIDException $e) {
return redirect('/')->with('error', 'Ошибка авторизации: ' . $e->getMessage());
}
}
public function logout(Request $request)
{
$accessToken = $request->session()->get('tbank_access_token');
if ($accessToken) {
try {
TBankID::revokeToken($accessToken);
} catch (TBankIDException $e) {
// Логируем ошибку, но продолжаем выход
}
}
$request->session()->forget(['tbank_access_token', 'tbank_refresh_token', 'tbank_user']);
return redirect('/')->with('success', 'Вы вышли из системы');
}
}
use Tigusigalpa\TBankID\TBankIDClient;
class AuthService
{
protected TBankIDClient $tbankClient;
public function __construct(TBankIDClient $tbankClient)
{
$this->tbankClient = $tbankClient;
}
public function authenticate(string $code): array
{
return $this->tbankClient->getAccessToken($code);
}
}
use Tigusigalpa\TBankID\Facades\TBankID;
use Tigusigalpa\TBankID\Models\TBankUser;
$accessToken = session('tbank_access_token');
$userInfo = TBankID::getUserInfo($accessToken);
$user = new TBankUser($userInfo);
// Получение данных пользователя
$userId = $user->getId();
$email = $user->getEmail();
$phone = $user->getPhone();
$name = $user->getName();
$givenName = $user->getGivenName();
$familyName = $user->getFamilyName();
$middleName = $user->getMiddleName();
// Проверка верификации
$isEmailVerified = $user->isEmailVerified();
$isPhoneVerified = $user->isPhoneVerified();
// Получение всех данных
$allData = $user->toArray();
// app/Http/Middleware/TBankAuthenticated.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class TBankAuthenticated
{
public function handle(Request $request, Closure $next)
{
if (!$request->session()->has('tbank_access_token')) {
return redirect()->route('tbank.login');
}
return $next($request);
}
}