我正在通过Service Account查询 Analytics API 。
我已经在开发服务器上编写了代码,它可以正常工作。在生产服务器上运行相同的代码时,它会抛出:
Google_AuthException:刷新 OAuth2 令牌时出错,消息:'{“error”:“invalid_grant”}'
我已经尝试创建另一个服务帐户,并且行为是相同的。
oAuth IETF 草案 ( https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-31 ) 说明了这个错误:
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.
这是我写的代码:
$GA_CLIENT_ID = 'XX.apps.googleusercontent.com';
$GA_APP_EMAIL = 'XX@developer.gserviceaccount.com';
$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;
我还尝试了使用 authenticatedRequest() 而不是 Google_AnalyticsService建议的解决方案( https://groups.google.com/forum/?fromgroups#!topic/gs-discussion/3y_2XVE2q7U%5B1-25%5D ):
$req = new Google_HttpRequest($apiUrl);
$resp = $client::getIo()->authenticatedRequest($req);
$result = json_decode($resp->getResponseBody(), true);
这种替代方案也适用于开发服务器,但不适用于生产服务器。
我对此一无所知。有没有人看到这个/修复它?
谢谢!