client = new Client(); $this->baseUrl = $baseUrl; $this->headers = array_merge( [ 'Accept' => 'application/json', 'Content-Type' => 'application/json' ], $headers ); } public function makeRequest($url, $method = 'GET', $body = null, $headers = [], $timeout = 14400){ try { $headers = array_merge($this->headers, $headers); $options = [ 'headers' => $headers, 'timeout' => $timeout, 'connect_timeout' => 60 ]; if ($body) { $options['json'] = $body; // Guzzle akan mengonversi array ke JSON } $response = $this->client->request($method, $this->baseUrl . $url, $options); $responseBody = (string) $response->getBody(); if (!str_contains($response->getHeaderLine('Content-Type'), 'application/json')) { \Log::error('Unexpected response format: ' . $responseBody); return $this->resError('API response is not JSON'); } $resultResponse = json_decode($responseBody, true, 512, JSON_THROW_ON_ERROR); return $this->resSuccess($resultResponse); } catch (\GuzzleHttp\Exception\ClientException $e) { // Handle 4xx errors (e.g., 401 Unauthorized) $responseBody = (string) $e->getResponse()->getBody(); $errorResponse = json_decode($responseBody, true); if (isset($errorResponse['code']) && $errorResponse['code'] === 'token_not_valid') { return $this->resError('Invalid token, please refresh your token.', $errorResponse, 401); } return $this->resError('Client error from API', $errorResponse, $e->getResponse()->getStatusCode()); } catch (\GuzzleHttp\Exception\ServerException $e) { // Handle 5xx errors (e.g., Internal Server Error) return $this->resError('Server error from API', (string) $e->getResponse()->getBody(), 500); } catch (\GuzzleHttp\Exception\RequestException $e) { // Handle network errors (e.g., timeout, connection issues) return $this->resError('Network error: ' . $e->getMessage(), null, 503); } catch (Exception $e) { // Handle unexpected errors return $this->resError('Unexpected error: ' . $e->getMessage(), null, 500); } } // Fungsi untuk melakukan permintaan GET public function get($url, $headers = []) { return $this->makeRequest($url, 'GET', null, $headers); } // Fungsi untuk melakukan permintaan POST public function post($url, $body, $headers = []) { return $this->makeRequest($url, 'POST', $body, $headers); } // Fungsi untuk melakukan permintaan PUT public function put($url, $body, $headers = []) { return $this->makeRequest($url, 'PUT', $body, $headers); } // Fungsi untuk melakukan permintaan DELETE public function delete($url, $headers = []) { return $this->makeRequest($url, 'DELETE', null, $headers); } }