Exceção oauth da API do Google Analytics "invalid_grant" com a conta de serviço. O mesmo código em dois servidores. Apenas um funciona

Estou consultando a API do Google Analytics por meio de umConta de serviço.

Eu escrevi o código no servidor dev e funciona sem problemas. Ao executar o mesmo código no servidor de produção, ele lança isto:

Google_AuthException: Erro ao atualizar o token OAuth2, mensagem: '{"error": "invalid_grant"}'

Eu tentei criar outra conta de serviço e o comportamento é o mesmo.

O esboço da oAuth IETF (http://tools.ietf.org/html/draft-ietf-oauth-v2-31) diz isso sobre o erro:

     invalid_grant
           The provided authorization grant (e.g. authorization
           code, resource owner credentials) or refresh token is
           invalid, expired, revoked, does not match the redirection
           URI used in the authorization request, or was issued to
           another client.

Aqui está o código que eu escrevi:

$GA_CLIENT_ID = 'XX.apps.googleusercontent.com';
$GA_APP_EMAIL = '[email protected]';
$GA_APP_NAME = 'XX';
$GA_KEY_FILE = 'XX';

// create client object and set app name
$client = new Google_Client();
$client->setApplicationName($GA_APP_NAME); // name of your app

// set assertion credentials
$client->setAssertionCredentials(
        new Google_AssertionCredentials(
            $GA_APP_EMAIL, // email you added to GA
            array('https://www.googleapis.com/auth/analytics.readonly'),
            file_get_contents($GA_KEY_FILE)  // keyfile you downloaded
            ));

// other settings
$client->setClientId($GA_CLIENT_ID);           // from API console
$client->setAccessType('offline_access');  // this may be unnecessary?

// create service and get data
$service = new Google_AnalyticsService($client);
$result = $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
return $result;

Eu também tentei uma solução sugerida aqui (https://groups.google.com/forum/?fromgroups#!topic/gs-discussion/3y_2XVE2q7U%5B1-25%5D) usando authenticatedRequest () em vez de Google_AnalyticsService:

$req = new Google_HttpRequest($apiUrl);
$resp = $client::getIo()->authenticatedRequest($req);
$result = json_decode($resp->getResponseBody(), true);

Essa alternativa também funciona no servidor de desenvolvimento, mas não no servidor de produção.

Eu sou totalmente ignorante sobre isso. Alguém viu isso / consertou?

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion