83 lines
3.3 KiB
PHP
83 lines
3.3 KiB
PHP
<?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'); // ID приложения (Portal)
|
||
$clientSecret = getenv('ALFA_BAAS_CLIENT_SECRET'); // Secret Key (Portal OR Generated via SDK)
|
||
$redirectUri = 'https://your-domain.com/callback'; // Callback URL (Portal)
|
||
$cert = __DIR__ . '/certs/client.cer'; // Public Cert (From Bank)
|
||
$key = __DIR__ . '/certs/private.key'; // Private Key (Generated by You)
|
||
|
||
// 2. Инициализация SDK (сразу с кредами)
|
||
$baas = AlfaBank::baas(
|
||
certificatePath: $cert,
|
||
privateKeyPath: $key,
|
||
environment: Environment::SANDBOX,
|
||
clientId: $clientId,
|
||
clientSecret: $clientSecret,
|
||
redirectUri: $redirectUri
|
||
);
|
||
|
||
// --- СЦЕНАРИЙ 1: Генерация ссылки на вход ---
|
||
// Используем нативный метод Saloon
|
||
$link = $baas->getAuthorizationUrl(scopes: ['beneficiaries', 'payment']);
|
||
echo "1. Перейдите по ссылке для авторизации:\n$link\n\n";
|
||
|
||
// --- СЦЕНАРИЙ 2: Обмен кода на токен (в callback-скрипте) ---
|
||
// $code приходит в GET-параметре: /callback?code=...
|
||
$codeFromUrl = '...код из браузера...';
|
||
|
||
if ($codeFromUrl !== '...код из браузера...') {
|
||
try {
|
||
echo "2. Обмен кода на токены...\n";
|
||
|
||
// Saloon делает всё сам:
|
||
$authenticator = $baas->getAccessToken($codeFromUrl);
|
||
|
||
echo 'Access Token: ' . substr($authenticator->getAccessToken(), 0, 20) . "...\n";
|
||
echo 'Refresh Token: ' . $authenticator->getRefreshToken() . "\n";
|
||
echo 'Expires At: ' . $authenticator->getExpiresAt()->format('Y-m-d H:i:s') . "\n";
|
||
|
||
// TODO: Сохраните 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";
|
||
|
||
// Обновляем токен
|
||
$newAuthenticator = $baas->refreshAccessToken($savedRefreshToken);
|
||
|
||
// Автоматически применяем к коннектору (для текущего скрипта)
|
||
$baas->authenticate($newAuthenticator);
|
||
|
||
echo "Токен обновлен!\n";
|
||
|
||
// Если пришел новый refresh_token — обновляем его
|
||
if ($newAuthenticator->getRefreshToken()) {
|
||
// DB::update(...)
|
||
echo "Новый Refresh Token получен.\n";
|
||
}
|
||
} catch (\Exception $e) {
|
||
echo 'Ошибка обновления токена: ' . $e->getMessage() . "\n";
|
||
}
|
||
}
|