public function testFactory() { $token = AccessToken::factory(new Response(200, [], Stream::factory('{"access_token":"test_token_value","expires_in":3600,"refresh_token":"test_refresh_token"}')), new Douban()); $this->assertEquals(AccessTokenInterface::VERSION_OAUTH2, $token->getTokenVersion()); $this->assertEquals('test_token_value', $token->getTokenValue()); $this->assertEquals('test_refresh_token', $token->getRefreshToken()); $this->assertTrue(is_numeric($token->getExpireTimestamp())); $this->assertInstanceOf('GuzzleHttp\\Message\\Response', $token->getResponse()); }
/** * @param ResourceServerInterface $resourceServer * @param array $urlQuery * @return \Eva\EvaOAuth\OAuth2\Token\AccessTokenInterface */ public function getAccessToken(ResourceServerInterface $resourceServer, array $urlQuery = []) { $urlQuery = $urlQuery ?: $_GET; $code = empty($urlQuery['code']) ? '' : $urlQuery['code']; $state = empty($urlQuery['state']) ? '' : $urlQuery['state']; $options = $this->options; if (!$code) { throw new InvalidArgumentException("No authorization code found"); } //TODO: Valid state to void attach $parameters = ['grant_type' => 'authorization_code', 'code' => $code, 'client_id' => $options['client_id'], 'client_secret' => $options['client_secret'], 'redirect_uri' => $options['redirect_uri']]; if ($state) { $parameters['state'] = $state; } $httpClient = $this->httpClient; $method = $resourceServer->getAccessTokenMethod(); $httpClientOptions = $method == ResourceServerInterface::METHOD_GET ? ['query' => $parameters] : ['body' => $parameters]; $request = $httpClient->createRequest($method, $resourceServer->getAccessTokenUrl(), $httpClientOptions); try { $this->getEmitter()->emit('beforeGetAccessToken', new BeforeGetAccessToken($request, $resourceServer)); /** @var Response $response */ $response = $httpClient->send($request); return AccessToken::factory($response, $resourceServer); } catch (RequestException $e) { throw new \Eva\EvaOAuth\Exception\RequestException('Get access token failed', $e->getRequest(), $e->getResponse()); } }