1001, 'Nominativo' => 'Utente Simulato 1001' ], [ 'IdUtente' => 1002, 'Nominativo' => 'Utente Simulato 1002' ] ]; echo json_encode(['value' => $fakeUsers]); exit; } // OData parameters $params = []; // Build query string $queryString = http_build_query($params); // Final endpoint $endpoint = "Utente?$queryString"; // Function to execute request with retry function makeApiRequest($api, $endpoint, $maxRetries = 3) { for ($retry = 0; $retry < $maxRetries; $retry++) { try { $data = $api->get($endpoint); // Save response for debug file_put_contents(__DIR__ . '/utenti_response.json', json_encode($data, JSON_PRETTY_PRINT)); return $data; } catch (Exception $e) { $errorMessage = $e->getMessage(); // Retry only on token/auth-related issue if ( strpos($errorMessage, 'HTTP 400') !== false && strpos($errorMessage, 'Cannot persist the object') !== false ) { try { $api->refreshToken(); // must exist in VisualLimsApiClient error_log("Tentativo $retry: Refresh token eseguito per endpoint $endpoint"); } catch (Exception $refreshEx) { error_log("Errore durante il refresh del token: " . $refreshEx->getMessage()); throw new Exception("Impossibile eseguire il refresh del token: " . $refreshEx->getMessage()); } usleep(500000); // 500 ms continue; } throw $e; } } throw new Exception("Massimo numero di tentativi raggiunto per $endpoint"); } // Execute request $data = makeApiRequest($api, $endpoint); echo json_encode($data); } catch (Exception $e) { http_response_code(500); $errorResponse = [ 'error' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTraceAsString() ]; error_log("Errore in get_utenti.php: " . json_encode($errorResponse)); echo json_encode($errorResponse); }