__DIR__ . '/certs/client.cer', 'key' => __DIR__ . '/certs/private.key', // APP CREDENTIALS (OAUTH2): // From: Developer Portal -> Your App -> Settings/Keys // Note: If you don't have client_secret, generate it using `14_generate_client_secret.php` 'client_id' => getenv('ALFA_BAAS_CLIENT_ID'), 'client_secret' => getenv('ALFA_BAAS_CLIENT_SECRET'), // REDIRECT URI: // Must match exactly what you entered in Developer Portal for this App. 'redirect_uri' => 'https://your-app.com/callback', // BUSINESS DATA: // From your Contract or Internet Bank. Not related to Auth directly. '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"; } }