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"; } }