Tenho brincado com a API do Google Analytics (V3) e encontrei alguns erros. Em primeiro lugar, tudo está configurado corretamente e funcionou com minha conta de teste. Mas quando eu quero obter dados de outro ID de perfil (mesma conta do Google / GA), recebo um erro 403. O estranho é que os dados de algumas contas do GA retornarão dados enquanto outras geram esse erro.
Revoguei o token e autentiquei mais uma vez e agora parece que posso obter dados de todas as minhas contas. Problema resolvido? Não. Como a chave de acesso vai expirar, vou ter o mesmo problema novamente.
Se eu entendi as coisas direito, pode-se usar o resfreshToken para obter um novo authenticationTooken.
O problema é, quando eu executo:
$client->refreshToken(refresh_token_key)
o seguinte erro é retornado:
Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'
Verifiquei o código por trás do método refreshToken e rastreei a solicitação de volta ao arquivo “apiOAuth2.php”. Todos os parâmetros são enviados corretamente. O grant_type é codificado para 'refresh_token' dentro do método, então é difícil para mim entender o que está errado. A matriz de parâmetros se parece com isto:
Array ( [client_id] => *******-uqgau8uo1l96bd09eurdub26c9ftr2io.apps.googleusercontent.com [client_secret] => ******** [refresh_token] => 1\/lov250YQTMCC9LRQbE6yMv-FiX_Offo79UXimV8kvwY [grant_type] => refresh_token )
O procedimento é o seguinte.
$client = new apiClient();
$client->setClientId($config['oauth2_client_id']);
$client->setClientSecret($config['oauth2_client_secret']);
$client->setRedirectUri($config['oauth2_redirect_uri']);
$client->setScopes('https://www.googleapis.com/auth/analytics.readonly');
$client->setState('offline');
$client->setAccessToken($config['token']); // The access JSON object.
$client->refreshToken($config['refreshToken']); // Will return error here
Isso é um bug ou eu entendi algo completamente errado?