/**
  *
  * @param array $p
  * @return bool|TokenResponse
  */
 protected function accessTokenRequest(array $p)
 {
     $this->c->setConfig(array(\Guzzle\Http\Client::REQUEST_OPTIONS => array('allow_redirects' => false, 'exceptions' => false, 'verify' => false)));
     if ($this->clientConfig->getCredentialsInRequestBody()) {
         // provide credentials in the POST body
         $p['client_id'] = $this->clientConfig->getClientId();
         $p['client_secret'] = $this->clientConfig->getClientSecret();
     } else {
         // use basic authentication
         $curlAuth = new \Guzzle\Plugin\CurlAuth\CurlAuthPlugin($this->clientConfig->getClientId(), $this->clientConfig->getClientSecret());
         $this->c->addSubscriber($curlAuth);
     }
     try {
         $request = $this->c->post($this->clientConfig->getTokenEndpoint());
         $request->addPostFields($p);
         $request->addHeader('Accept', 'application/json');
         $responseData = $request->send()->json();
         // some servers do not provide token_type, so we allow for setting
         // a default
         // issue: https://github.com/fkooman/php-oauth-client/issues/13
         if (null !== $this->clientConfig->getDefaultTokenType()) {
             if (is_array($responseData) && !isset($responseData['token_type'])) {
                 $responseData['token_type'] = $this->clientConfig->getDefaultTokenType();
             }
         }
         // if the field "expires_in" has the value null, remove it
         // issue: https://github.com/fkooman/php-oauth-client/issues/17
         if ($this->clientConfig->getAllowNullExpiresIn()) {
             if (is_array($responseData) && array_key_exists("expires_in", $responseData)) {
                 if (null === $responseData['expires_in']) {
                     unset($responseData['expires_in']);
                 }
             }
         }
         // if the field "scope" is empty string a default can be set
         // through the client configuration
         // issue: https://github.com/fkooman/php-oauth-client/issues/20
         if (null !== $this->clientConfig->getDefaultServerScope()) {
             if (is_array($responseData) && isset($responseData['scope']) && '' === $responseData['scope']) {
                 $responseData['scope'] = $this->clientConfig->getDefaultServerScope();
             }
         }
         return new TokenResponse($responseData);
     } catch (\Guzzle\Common\Exception\RuntimeException $e) {
         return false;
     }
 }
 private function accessTokenRequest(array $p)
 {
     if ($this->clientConfig->getCredentialsInRequestBody()) {
         // provide credentials in the POST body
         $p['client_id'] = $this->clientConfig->getClientId();
         $p['client_secret'] = $this->clientConfig->getClientSecret();
     } else {
         // use basic authentication
         $this->httpClient->setBasicAuth($this->clientConfig->getClientId(), $this->clientConfig->getClientSecret());
     }
     try {
         $this->httpClient->addHeader('Accept', 'application/json');
         $this->httpClient->addPostFields($p);
         $responseData = $this->httpClient->post($this->clientConfig->getTokenEndpoint());
         // some servers do not provide token_type, so we allow for setting
         // a default
         // issue: https://github.com/fkooman/php-oauth-client/issues/13
         if (null !== $this->clientConfig->getDefaultTokenType()) {
             if (is_array($responseData) && !isset($responseData['token_type'])) {
                 $responseData['token_type'] = $this->clientConfig->getDefaultTokenType();
             }
         }
         // if the field "expires_in" has the value null, remove it
         // issue: https://github.com/fkooman/php-oauth-client/issues/17
         if ($this->clientConfig->getAllowNullExpiresIn()) {
             if (is_array($responseData) && array_key_exists('expires_in', $responseData)) {
                 if (null === $responseData['expires_in']) {
                     unset($responseData['expires_in']);
                 }
             }
         }
         // if the field "scope" is empty string a default can be set
         // through the client configuration
         // issue: https://github.com/fkooman/php-oauth-client/issues/20
         if (null !== $this->clientConfig->getDefaultServerScope()) {
             if (is_array($responseData) && isset($responseData['scope']) && '' === $responseData['scope']) {
                 $responseData['scope'] = $this->clientConfig->getDefaultServerScope();
             }
         }
         // the service can return a string value of the expires_in
         // parameter, allow to convert to number instead
         // issue: https://github.com/fkooman/php-oauth-client/issues/40
         if ($this->clientConfig->getAllowStringExpiresIn()) {
             if (is_array($responseData) && isset($responseData['expires_in']) && is_string($responseData['expires_in'])) {
                 $responseData['expires_in'] = intval($responseData['expires_in']);
             }
         }
         if ($this->clientConfig->getUseCommaSeparatedScope()) {
             if (is_array($responseData) && isset($responseData['scope'])) {
                 $responseData['scope'] = str_replace(',', ' ', $responseData['scope']);
             }
         }
         // issue: https://github.com/fkooman/php-oauth-client/issues/41
         if ($this->clientConfig->getUseArrayScope()) {
             if (is_array($responseData) && isset($responseData['scope'])) {
                 if (is_array($responseData['scope'])) {
                     $responseData['scope'] = implode(' ', $responseData['scope']);
                 }
             }
         }
         return new TokenResponse($responseData);
     } catch (RuntimeException $e) {
         return false;
     }
 }