/** * Use the send method to call every endpoint except for oauth/tokens * * @param HttpClient $client * @param string $endPoint E.g. "/tickets.json" * @param array $options * Available options are listed below: * array $queryParams Array of unencoded key-value pairs, e.g. ["ids" => "1,2,3,4"] * array $postFields Array of unencoded key-value pairs, e.g. ["filename" => "blah.png"] * string $method "GET", "POST", etc. Default is GET. * string $contentType Default is "application/json" * * @return \stdClass | null The response body, parsed from JSON into an object. Also returns null if something went wrong * @throws ApiResponseException * @throws AuthException */ public static function send(HttpClient $client, $endPoint, $options = []) { $options = array_merge(['method' => 'GET', 'contentType' => 'application/json', 'postFields' => null, 'queryParams' => null], $options); $headers = array_merge(['Accept' => 'application/json', 'Content-Type' => $options['contentType'], 'User-Agent' => $client->getUserAgent()], $client->getHeaders()); $request = new Request($options['method'], $client->getApiUrl() . $client->getApiBasePath() . $endPoint, $headers); $requestOptions = []; if (!empty($options['multipart'])) { $request = $request->withoutHeader('Content-Type'); $requestOptions['multipart'] = $options['multipart']; } elseif (!empty($options['postFields'])) { $request = $request->withBody(\GuzzleHttp\Psr7\stream_for(json_encode($options['postFields']))); } elseif (!empty($options['file'])) { if (is_file($options['file'])) { $fileStream = new LazyOpenStream($options['file'], 'r'); $request = $request->withBody($fileStream); } } if (!empty($options['queryParams'])) { foreach ($options['queryParams'] as $queryKey => $queryValue) { $uri = $request->getUri(); $uri = $uri->withQueryValue($uri, $queryKey, $queryValue); $request = $request->withUri($uri, true); } } // \RockstarGames\Cake\Log\Log::debug($request); // \RockstarGames\Cake\Log\Log::debug($options); try { list($request, $requestOptions) = $client->getAuth()->prepareRequest($request, $requestOptions); $response = $client->guzzle->send($request, $requestOptions); } catch (RequestException $e) { $requestException = RequestException::create($e->getRequest(), $e->getResponse()); throw new ApiResponseException($requestException); } finally { $client->setDebug($request->getHeaders(), $request->getBody()->getContents(), isset($response) ? $response->getStatusCode() : null, isset($response) ? $response->getHeaders() : null, isset($e) ? $e : null); $request->getBody()->rewind(); } if (isset($file)) { fclose($file); } $client->setSideload(null); return json_decode($response->getBody()->getContents()); }