Files
alfa-bank-sdk/examples/13_h2h_auth_service.php
Anatoliy Poloz 2964c391b5 Add H2H authentication service and new example flows
- Implement H2H authentication service for secure client authentication
- Add new examples for authorization code flow and H2H auth service
- Include example for generating client secret
- Update core connector and token request functionality
- Enhance README with new features

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-23 20:58:30 +03:00

80 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use Apoloz\AlfaBank\AlfaBank;
use Apoloz\AlfaBank\Enums\Environment;
/**
* Пример использования H2HAuthService для удобной авторизации
*/
// 1. Конфигурация
$clientId = getenv('ALFA_BAAS_CLIENT_ID');
$clientSecret = getenv('ALFA_BAAS_CLIENT_SECRET');
$redirectUri = 'https://your-domain.com/callback';
$cert = __DIR__ . '/certs/client.cer';
$key = __DIR__ . '/certs/private.key';
// 2. Инициализация сервиса авторизации
$authService = AlfaBank::auth(
$clientId,
$clientSecret,
$redirectUri,
$cert,
$key,
Environment::SANDBOX
);
// --- СЦЕНАРИЙ 1: Генерация ссылки на вход ---
// Выведите эту ссылку в админке или логах
$link = $authService->getAuthUrl(scopes: ['beneficiaries', 'payment']);
echo "1. Перейдите по ссылке для авторизации:\n$link\n\n";
// --- СЦЕНАРИЙ 2: Обмен кода на токен (в callback-скрипте) ---
// $code приходит в GET-параметре: /callback?code=...
$codeFromUrl = '...код из браузера...';
if ($codeFromUrl !== '...код из браузера...') {
try {
echo "2. Обмен кода на токены...\n";
$tokenData = $authService->exchangeCode($codeFromUrl);
echo "Access Token: " . substr($tokenData->access_token, 0, 20) . "...\n";
echo "Refresh Token: " . $tokenData->refresh_token . "\n";
echo "Expires In: " . $tokenData->expires_in . " sec\n";
// TODO: Сохраните refresh_token в базу данных!
// DB::table('settings')->updateOrInsert(['key' => 'alfa_refresh_token'], ['value' => $tokenData->refresh_token]);
} catch (
Exception $e) {
echo "Ошибка обмена кода: " . $e->getMessage() . "\n";
}
}
// --- СЦЕНАРИЙ 3: Регулярное обновление токена (Cron / Middleware) ---
$savedRefreshToken = '...saved_refresh_token...';
if ($savedRefreshToken !== '...saved_refresh_token...') {
try {
echo "3. Обновление токена...\n";
$newTokenData = $authService->refreshToken($savedRefreshToken);
echo "Токен обновлен!\n";
// Если пришел новый refresh_token — обновляем его
if ($newTokenData->refresh_token) {
// DB::update(...)
echo "Новый Refresh Token получен.\n";
}
} catch (
Exception $e) {
echo "Ошибка обновления токена: " . $e->getMessage() . "\n";
}
}