* @link http://www.oxidmodule.com */ namespace D3\LinkmobilityClient; use D3\LinkmobilityClient\Request\RequestInterface; class Client { private $accessToken; public $apiUrl; public $requestClient; public function __construct(string $accessToken, $apiUrl = false, $client = false) { if ($apiUrl !== false && false === $apiUrl instanceof UrlInterface) { throw new \RuntimeException('ApiUrl instance must implement UrlInterface'); } $this->accessToken = $accessToken; $this->apiUrl = $apiUrl ?: new Url(); $this->requestClient = $client ?: new \GuzzleHttp\Client( [ 'base_uri' => $this->apiUrl->getBaseUri() ] ); } public function request(RequestInterface $request) : ResponseInterface { $request->validate(); $responseClass = $request->getResponseClass(); return $request->getResponseInstance( $this->rawRequest($request->getUri(), $request->getMethod(), $request->getOptions()) ); } /** * @param $url * @param string $method * @param array $postArgs * * @return string * @throws ApiException * @throws GuzzleException */ protected function rawRequest( $url, string $method = RequestInterface::METHOD_GET, array $options = []): string { $options['headers']['Authorization'] = 'access_token '.$this->accessToken; if (!empty($body)) { $options['json'] = $body; } dumpvar(__METHOD__.__LINE__.PHP_EOL); dumpvar($options); dumpVar($method); dumpvar($url); die(); $response = $this->requestClient->request( $method, $url, $options ); if ($response->getStatusCode() != 200) { throw new ApiException('request '.$url.' returns status code '.$response->getStatusCode()); } return $response; } }