/**
  * @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));
     }
 }
Example #2
0
 /**
  * @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;
 }