send(new RefreshClientSecretRequest($clientId)); $tempSecret = $secretResponse->dto()->clientSecret; echo ' Secret acquired: ' . substr($tempSecret, 0, 5) . "...\n"; // 3. AUTHENTICATE OAUTH2 // Now we use the fresh secret to get an access token. echo "2. Refreshing OAuth2 session...\n"; // Re-initialize connector with the new secret $baasReady = AlfaBank::baas( certificatePath: $certPath, privateKeyPath: $keyPath, environment: Environment::SANDBOX, clientId: $clientId, clientSecret: $tempSecret, redirectUri: $redirectUri ); // Refresh token using native method $authenticator = $baasReady->refreshAccessToken($savedRefreshToken); $baasReady->authenticate($authenticator); echo ' Session active. Access Token expires at ' . $authenticator->getExpiresAt()->format('H:i:s') . "\n"; // Update DB if refresh token rotated if ($authenticator->getRefreshToken()) { // saveNewRefreshToken($authenticator->getRefreshToken()); echo " New Refresh Token saved.\n"; } // 4. BUSINESS LOGIC echo "3. Fetching beneficiaries...\n"; $response = $baasReady->send(new GetBeneficiariesRequest($accNum, 'FL_RESIDENT')); echo ' Success! Found ' . count($response->dto()->beneficiaries) . " records.\n"; } catch (Exception $e) { echo 'CRITICAL ERROR: ' . $e->getMessage() . "\n"; if (method_exists($e, 'getResponse')) { echo 'Body: ' . $e->getResponse()->body() . "\n"; } }