public function fetchAccessToken($oauthToken = null, OAuthToken $requestToken = null, $oauthVerifier = null, array $params = [])
{
if ($oauthToken === null) {
if (isset($_REQUEST['oauth_token'])) {
$oauthToken = $_REQUEST['oauth_token'];
}
}
if (!is_object($requestToken)) {
$requestToken = $this->getState('requestToken');
if (!is_object($requestToken)) {
throw new InvalidParamException('Request token is required to fetch access token!');
}
}
if (strcmp($requestToken->getToken(), $oauthToken) !== 0) {
throw new HttpException(400, 'Invalid auth state parameter.');
}
$this->removeState('requestToken');
$defaultParams = ['oauth_consumer_key' => $this->consumerKey, 'oauth_token' => $requestToken->getToken()];
if ($oauthVerifier === null) {
if (isset($_REQUEST['oauth_verifier'])) {
$oauthVerifier = $_REQUEST['oauth_verifier'];
}
}
if (!empty($oauthVerifier)) {
$defaultParams['oauth_verifier'] = $oauthVerifier;
}
$request = $this->createRequest()->setMethod($this->accessTokenMethod)->setUrl($this->accessTokenUrl)->setData(array_merge($defaultParams, $params));
$this->signRequest($request, $requestToken);
$response = $this->sendRequest($request);
$token = $this->createToken(['params' => $response]);
$this->setAccessToken($token);
return $token;
}