forked from apoloz/alfa-bank-sdk
- 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>
80 lines
2.7 KiB
PHP
80 lines
2.7 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');
|
||
$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";
|
||
}
|
||
}
|
||
|