Update documentation and examples, add new nominal accounts features and authentication methods

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
2026-01-24 17:18:59 +03:00
parent 2964c391b5
commit bb5f91d399
13 changed files with 290 additions and 157 deletions

View File

@@ -12,25 +12,26 @@ use Apoloz\AlfaBank\Enums\Environment;
*/
// 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';
// Все эти данные вы получаете на Портале Разработчика и в Интернет-банке.
$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. Инициализация сервиса авторизации
$authService = AlfaBank::auth(
$clientId,
$clientSecret,
$redirectUri,
$cert,
$key,
Environment::SANDBOX
// 2. Инициализация SDK (сразу с кредами)
$baas = AlfaBank::baas(
certificatePath: $cert,
privateKeyPath: $key,
environment: Environment::SANDBOX,
clientId: $clientId,
clientSecret: $clientSecret,
redirectUri: $redirectUri
);
// --- СЦЕНАРИЙ 1: Генерация ссылки на вход ---
// Выведите эту ссылку в админке или логах
$link = $authService->getAuthUrl(scopes: ['beneficiaries', 'payment']);
// Используем нативный метод Saloon
$link = $baas->getAuthorizationUrl(scopes: ['beneficiaries', 'payment']);
echo "1. Перейдите по ссылке для авторизации:\n$link\n\n";
@@ -41,17 +42,17 @@ $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";
// 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 в базу данных!
// DB::table('settings')->updateOrInsert(['key' => 'alfa_refresh_token'], ['value' => $tokenData->refresh_token]);
} catch (
Exception $e) {
} catch (\Exception $e) {
echo "Ошибка обмена кода: " . $e->getMessage() . "\n";
}
}
@@ -62,17 +63,21 @@ $savedRefreshToken = '...saved_refresh_token...';
if ($savedRefreshToken !== '...saved_refresh_token...') {
try {
echo "3. Обновление токена...\n";
$newTokenData = $authService->refreshToken($savedRefreshToken);
// Обновляем токен
$newAuthenticator = $baas->refreshAccessToken($savedRefreshToken);
// Автоматически применяем к коннектору (для текущего скрипта)
$baas->authenticate($newAuthenticator);
echo "Токен обновлен!\n";
// Если пришел новый refresh_token — обновляем его
if ($newTokenData->refresh_token) {
if ($newAuthenticator->getRefreshToken()) {
// DB::update(...)
echo "Новый Refresh Token получен.\n";
}
} catch (
Exception $e) {
} catch (\Exception $e) {
echo "Ошибка обновления токена: " . $e->getMessage() . "\n";
}
}