public function testFactory() { $token = AccessToken::factory(new Response(200, [], Stream::factory('oauth_token=test_token_value&oauth_token_secret=test_token_secret')), new Twitter(), ['consumer_key' => 'test_consumer_key', 'consumer_secret' => 'test_consumer_secret']); $this->assertEquals(AccessTokenInterface::VERSION_OAUTH1, $token->getTokenVersion()); $this->assertEquals('test_consumer_key', $token->getConsumerKey()); $this->assertEquals('test_consumer_secret', $token->getConsumerSecret()); $this->assertEquals('test_token_value', $token->getTokenValue()); $this->assertEquals('test_token_secret', $token->getTokenSecret()); $this->assertInstanceOf('GuzzleHttp\\Message\\Response', $token->getResponse()); }
/** * @param ServiceProviderInterface $serviceProvider * @param array $urlQuery * @param RequestToken $requestToken * @return AccessToken */ public function getAccessToken(ServiceProviderInterface $serviceProvider, array $urlQuery = [], RequestToken $requestToken = null) { $urlQuery = $urlQuery ?: $_GET; $tokenValue = empty($urlQuery['oauth_token']) ? '' : $urlQuery['oauth_token']; $tokenVerify = empty($urlQuery['oauth_verifier']) ? '' : $urlQuery['oauth_verifier']; if (!$tokenValue || !$tokenVerify) { throw new InvalidArgumentException(sprintf('No oauth_token or oauth_verifier input')); } /** @var RequestToken $requestToken */ $requestToken = $requestToken ?: $this->getStorage()->fetch(md5($tokenValue)); if (!$requestToken) { throw new InvalidArgumentException(sprintf('No request token found in storage')); } if ($tokenValue != $requestToken->getTokenValue()) { throw new VerifyException(sprintf('Request token not match')); } $options = $this->options; $httpMethod = $serviceProvider->getAccessTokenMethod(); $url = $serviceProvider->getAccessTokenUrl(); $parameters = ['oauth_consumer_key' => $options['consumer_key'], 'oauth_signature_method' => $this->signatureMethod, 'oauth_timestamp' => (string) time(), 'oauth_nonce' => Text::generateRandomString(32), 'oauth_token' => $tokenValue, 'oauth_version' => '1.0', 'oauth_verifier' => $tokenVerify, 'oauth_callback' => $options['callback']]; $baseString = Text::buildBaseString($httpMethod, $url, $parameters); $signatureClass = $this->getSignatureClass(); $signature = (string) new $signatureClass($baseString, $options['consumer_secret'], $requestToken->getTokenSecret()); $parameters['oauth_signature'] = $signature; $httpClient = self::getHttpClient(); $httpClientOptions = ['headers' => ['X-EvaOAuth-Debug-BaseString' => $baseString, 'Authorization' => Text::buildHeaderString($parameters)], 'body' => ['oauth_verifier' => $tokenVerify]]; $request = $httpClient->createRequest($httpMethod, $url, $httpClientOptions); try { $this->getEmitter()->emit('beforeGetAccessToken', new BeforeGetAccessToken($request, $serviceProvider, $this)); /** @var Response $response */ $response = $httpClient->send($request); return AccessToken::factory($response, $serviceProvider, $options); } catch (RequestException $e) { throw new \Eva\EvaOAuth\Exception\RequestException('Get access token failed', $e->getRequest(), $e->getResponse()); } }