/** * @param array $parameters * @throws ConnectionException */ public function requestToken(array $parameters = []) { if (!isset($parameters['grant_type'])) { throw new ConnectionException('grant_type undefined'); } $parameters['client_id'] = $this->getClientId(); $parameters['client_secret'] = $this->getClientSecret(); if (null !== $this->getScope()) { $parameters['scope'] = $this->getScope(); } /** @var Response $response */ try { $response = $this->getHttpClient()->get($this->getOntimeUrl() . self::TOKEN_URL, ['query' => $parameters]); if ($response->getStatusCode() === 200) { $result = $response->json(); if (isset($result['access_token'])) { $this->setToken($result['access_token']); } else { throw new ConnectionException('Error while trying to get token. ' . $result['error'] . ' : ' . $result['error_description'], $result); } } } catch (ClientException $e) { throw new ConnectionException('Bad request : ' . ExceptionAbstract::formatBadResponse($e), ExceptionAbstract::getBadResponseResult($e)); } }
/** * @param $action * @param null $postMainParameters * @return Response|null * @throws Exception\ConnectionException */ private function call($action, $postMainParameters = null) { $response = null; try { $url = $action . '/' . implode('/', $this->getMainParameters()) . ($postMainParameters === null ? null : '/' . $postMainParameters); /** @var Response $response */ $response = $this->getConnection()->getHttpClient()->get($url, ['query' => $this->getSecondaryParameters()]); error_log('Called URL : ' . $response->getEffectiveUrl()); } catch (BadResponseException $e) { $error = $e->getResponse()->json(); if (isset($error['error']) && $error['error'] === 'invalid_token') { $this->getConnection()->requestToken(); $response = $this->call($action, $postMainParameters); } elseif (in_array($e->getResponse()->getStatusCode(), [404])) { $response = null; } elseif (isset($error['error_description'])) { $response['error'] = $e->getResponse()->json(); } error_log('Error while trying to reach API with URL : ' . ExceptionAbstract::formatBadResponse($e)); } $this->setMainParameters([]); $this->setSecondaryParameters([]); return $response; }