209 lines
7.3 KiB
PHP
209 lines
7.3 KiB
PHP
<?php
|
|
require_once dirname(__DIR__, 3) . '/vendor/autoload.php';
|
|
|
|
use Dotenv\Dotenv;
|
|
|
|
class VisualLimsApiClient
|
|
{
|
|
private static $instance = null;
|
|
private $baseUrl;
|
|
private $username;
|
|
private $password;
|
|
private $token = null;
|
|
|
|
private function __construct()
|
|
{
|
|
$dotenv = Dotenv::createImmutable(dirname(__DIR__, 3)); // Corretto per C:\xampp8-2-12\htdocs\trf_certest\.env
|
|
$dotenv->load();
|
|
|
|
$this->baseUrl = $_ENV['API_BASE_URL'];
|
|
$this->username = $_ENV['API_USERNAME'];
|
|
$this->password = $_ENV['API_PASSWORD'];
|
|
}
|
|
|
|
public static function getInstance()
|
|
{
|
|
if (self::$instance === null) {
|
|
self::$instance = new VisualLimsApiClient();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
private function authenticate()
|
|
{
|
|
$ch = curl_init("{$this->baseUrl}/api/authentication/authenticate");
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
|
|
'Username' => $this->username,
|
|
'Password' => $this->password
|
|
]));
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
'Content-Type: application/json',
|
|
'Accept: application/json'
|
|
]);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
|
$log = fopen(__DIR__ . '/curl_auth_debug.log', 'w') ?: fopen('php://stderr', 'w');
|
|
curl_setopt($ch, CURLOPT_STDERR, $log);
|
|
|
|
$response = curl_exec($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$curl_error = curl_error($ch);
|
|
fclose($log);
|
|
curl_close($ch);
|
|
|
|
if ($response === false || $http_code != 200) {
|
|
throw new Exception("Autenticazione fallita: HTTP {$http_code}, Errore cURL: {$curl_error}, Risposta: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
$token_data = json_decode($response, true);
|
|
$this->token = null;
|
|
|
|
if (is_array($token_data) && isset($token_data['token'])) {
|
|
$this->token = $token_data['token'];
|
|
} elseif (is_string($token_data) && !empty($token_data)) {
|
|
$this->token = trim($token_data, '"');
|
|
} elseif (is_string($response) && !empty($response)) {
|
|
$this->token = trim($response, '"');
|
|
}
|
|
|
|
if (empty($this->token)) {
|
|
throw new Exception("Token non ricevuto: " . substr($response, 0, 1000));
|
|
}
|
|
}
|
|
|
|
private function getToken()
|
|
{
|
|
if ($this->token === null) {
|
|
$this->authenticate();
|
|
}
|
|
return $this->token;
|
|
}
|
|
|
|
public function get($endpoint)
|
|
{
|
|
$token = $this->getToken();
|
|
$url = "{$this->baseUrl}/api/odata/{$endpoint}";
|
|
|
|
|
|
$ch = curl_init($url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
"Authorization: Bearer {$token}",
|
|
"Accept: application/json"
|
|
]);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
|
$log = fopen(__DIR__ . '/curl_request_debug.log', 'w') ?: fopen('php://stderr', 'w');
|
|
curl_setopt($ch, CURLOPT_STDERR, $log);
|
|
|
|
$response = curl_exec($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$curl_error = curl_error($ch);
|
|
fclose($log);
|
|
curl_close($ch);
|
|
|
|
if ($response === false) {
|
|
throw new Exception("Errore nella richiesta: {$curl_error}");
|
|
}
|
|
|
|
if ($http_code !== 200) {
|
|
throw new Exception("Errore nel recupero dati: HTTP {$http_code}, Risposta: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
$data = json_decode($response, true);
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
|
throw new Exception("Risposta non JSON valida: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function post($endpoint, $payload)
|
|
{
|
|
$token = $this->getToken();
|
|
$url = "{$this->baseUrl}/api/odata/{$endpoint}"; // Corretto per /api/odata/CommessaWeb
|
|
file_put_contents(__DIR__ . '/url_debug.log', date('Y-m-d H:i:s') . " - POST URL: {$url}\n", FILE_APPEND);
|
|
$ch = curl_init($url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
"Authorization: Bearer {$token}",
|
|
"Content-Type: application/json",
|
|
"Accept: application/json"
|
|
]);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
|
$log = fopen(__DIR__ . '/curl_request_debug.log', 'w') ?: fopen('php://stderr', 'w');
|
|
curl_setopt($ch, CURLOPT_STDERR, $log);
|
|
|
|
$response = curl_exec($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$curl_error = curl_error($ch);
|
|
fclose($log);
|
|
curl_close($ch);
|
|
|
|
if ($response === false) {
|
|
throw new Exception("Errore nella richiesta POST: {$curl_error}");
|
|
}
|
|
|
|
if ($http_code >= 400) {
|
|
throw new Exception("Errore nella richiesta POST: HTTP {$http_code}, Risposta: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
$data = json_decode($response, true);
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
|
throw new Exception("Risposta non JSON valida: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function patch($endpoint, $payload)
|
|
{
|
|
$token = $this->getToken();
|
|
$url = "{$this->baseUrl}/api/odata/{$endpoint}"; // Corretto per /api/odata/CommessaWeb({key})
|
|
|
|
$ch = curl_init($url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
"Authorization: Bearer {$token}",
|
|
"Content-Type: application/json",
|
|
"Accept: application/json"
|
|
]);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
|
$log = fopen(__DIR__ . '/curl_request_debug.log', 'w') ?: fopen('php://stderr', 'w');
|
|
curl_setopt($ch, CURLOPT_STDERR, $log);
|
|
|
|
$response = curl_exec($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$curl_error = curl_error($ch);
|
|
fclose($log);
|
|
curl_close($ch);
|
|
|
|
if ($response === false) {
|
|
throw new Exception("Errore nella richiesta PATCH: {$curl_error}");
|
|
}
|
|
|
|
if ($http_code >= 400) {
|
|
throw new Exception("Errore nella richiesta PATCH: HTTP {$http_code}, Risposta: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
$data = json_decode($response, true);
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
|
throw new Exception("Risposta non JSON valida: " . substr($response, 0, 1000));
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
}
|