Files
alfa-bank-sdk/examples/12_auth_code_flow.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

81 lines
3.2 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;
use Apoloz\AlfaBank\Requests\NominalAccounts\Beneficiaries\GetBeneficiariesRequest;
/**
* Authorization Code Flow (H2H) Example
*
* Сценарий: Обмен полученного в браузере кода на токены и дальнейшая работа через refresh_token.
*/
// 1. Конфигурация
$config = [
'cert' => __DIR__ . '/certs/client.cer',
'key' => __DIR__ . '/certs/private.key',
'client_id' => getenv('ALFA_BAAS_CLIENT_ID'),
'client_secret' => getenv('ALFA_BAAS_CLIENT_SECRET'),
'redirect_uri' => 'https://your-app.com/callback', // Тот же, что указывали при получении кода
'account_number' => '40702810...'
];
// 2. Инициализация коннектора
$baas = AlfaBank::baas(
certificatePath: $config['cert'],
privateKeyPath: $config['key'],
environment: Environment::SANDBOX
);
// ВАЖНО: Мы пока НЕ вызываем login()!
try {
// --- СЦЕНАРИЙ А: Первый вход (у нас есть только код из браузера) ---
// Ссылка для получения кода: https://baas.alfabank.ru/oidc/authorize?response_type=code&client_id=...
$authCode = 'code_from_browser_url'; // <-- Вставьте сюда код
if ($authCode) {
echo "Обмениваем код на токены...\n";
$tokenData = $baas->authWithCode($authCode, $config['redirect_uri']);
echo "Access Token получен!\n";
echo "Refresh Token: " . $tokenData->refresh_token . "\n";
echo "(Сохраните refresh_token в базу данных)\n\n";
}
// --- СЦЕНАРИЙ Б: Повторный вход (у нас есть сохраненный refresh_token) ---
$savedRefreshToken = 'your_saved_refresh_token_from_db';
if ($savedRefreshToken) {
echo "Обновляем сессию по Refresh Token...\n";
$tokenData = $baas->refreshToken($savedRefreshToken);
echo "Сессия обновлена. Новый Access Token действует " . $tokenData->expires_in . " сек.\n";
if ($tokenData->refresh_token) {
echo "Пришел новый Refresh Token (сохраните его): " . $tokenData->refresh_token . "\n";
}
}
// 3. Выполняем защищенный запрос (например, список бенефициаров)
// Коннектор уже авторизован (внутри updateAccessToken/authWithCode вызывается authenticate())
echo "Запрашиваем список...\n";
$response = $baas->send(new GetBeneficiariesRequest(
accountNumber: $config['account_number'],
type: 'FL_RESIDENT'
));
echo "Успешно! Найдено: " . count($response->dto()->beneficiaries) . "\n";
} catch (\Exception $e) {
echo "Ошибка: " . $e->getMessage() . "\n";
if (method_exists($e, 'getResponse')) {
echo "Body: " . $e->getResponse()->body() . "\n";
}
}