'PHPSTORM', ], parse_url($baseUrl, PHP_URL_HOST)); } $this->client = new Client([ 'base_uri' => $baseUrl, 'cookies' => $cookies, ]); $this->debug = $debug; } /** * Make request to api. * * @param string $method HTTP method name. * @param string $endpoint Relative to base url. * @param array $payload Request payload, may send as query string or as * json relative to method name. * @param string $authToken Application authentication token. * * @return mixed|\Psr\Http\Message\ResponseInterface */ public function request( $method, $endpoint, array $payload = [], $authToken = null ) { $method = strtoupper($method); // Prepare full endpoint url. $endpoint = self::FRONT_CONTROLLER . '/' . ltrim($endpoint, '/'); // Prepare request options. $options = []; // Add authorization token if it provided. if ($authToken !== null) { $options['headers'] = [ 'Authorization' => 'Bearer '. $authToken ]; } // Send payload as query string for 'GET' request. // For other methods, send in content as json. $options[($method === 'GET') ? 'query' : 'json'] = $payload; // Show debug information about request. if ($this->debug) { echo 'Request: ' . $this->client->getConfig('base_uri') . $endpoint. PHP_EOL; echo 'Request options: ' . PHP_EOL . json_encode($options, JSON_PRETTY_PRINT) . PHP_EOL; } try { // Make request to api and save response to class. $this->lastResponseData = null; $this->lastResponse = $this->client->request($method, $endpoint, $options); } catch (BadResponseException $e) { $this->lastResponse = $e->getResponse(); } if ($this->debug) { $decodedResponse = json_decode($this->getLastResponseData(), true); if ($decodedResponse) { // In debug mode dump data received from server to output. print('Response data: ' . PHP_EOL . json_encode( $decodedResponse, JSON_PRETTY_PRINT ). PHP_EOL ); } else { print $this->getLastResponseData().PHP_EOL; } } return $this->lastResponse; } /** * Get last response. * * @return Response */ public function getLastResponse() { return $this->lastResponse; } /** * Get data from last response. * * @return null|string */ public function getLastResponseData() { if (($this->lastResponseData === null) && $this->lastResponse) { $this->lastResponseData = $this->lastResponse ->getBody() ->getContents(); } return $this->lastResponseData; } }