diff --git a/src/OAuth2/AbstractProvider.php b/src/OAuth2/AbstractProvider.php index 50105b88..1182e286 100644 --- a/src/OAuth2/AbstractProvider.php +++ b/src/OAuth2/AbstractProvider.php @@ -116,6 +116,25 @@ protected function makeAccessTokenRequest(string $code): RequestInterface ; } + /** + * @param string $refreshToken + * @return RequestInterface + */ + protected function makeRefreshAccessTokenRequest(string $refreshToken): RequestInterface + { + $parameters = [ + 'refresh_token' => $refreshToken, + 'client_id' => $this->consumer->getKey(), + 'client_secret' => $this->consumer->getSecret(), + 'grant_type' => 'refresh_token', + ]; + + return $this->httpStack->createRequest($this->requestHttpMethod, $this->getRequestTokenUri()) + ->withHeader('Content-Type', 'application/x-www-form-urlencoded') + ->withBody($this->httpStack->createStream(http_build_query($parameters, '', '&'))) + ; + } + /** * @param string $code * @return AccessToken @@ -132,6 +151,24 @@ public function getAccessToken(string $code): AccessToken return $this->parseToken($response->getBody()->getContents()); } + + /** + * @param string $refreshToken + * + * @return AccessToken + * @throws InvalidAccessToken + * @throws InvalidResponse + * @throws \Psr\Http\Client\ClientExceptionInterface + */ + public function refreshAccessToken(string $refreshToken): AccessToken + { + $response = $this->executeRequest( + $this->makeRefreshAccessTokenRequest($refreshToken) + ); + + return $this->parseToken($response->getBody()->getContents()); + } + /** * @param array $parameters * @return AccessToken