我已经在开发服务器上编写了代码,它的工作没有问题.
在生产服务器上运行相同的代码时,会抛出:
Google_AuthException: Error refreshing the OAuth2 token,message: ‘{
“error” : “invalid_grant” }’
我尝试创建另一个服务帐户,行为是一样的.
oAuth IETF草案(http://tools.ietf.org/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;
我也尝试了一个解决方案(https://groups.google.com/forum/?fromgroups#!topic/gs-discussion/3y_2XVE2q7U%5B1-25%5D),使用authenticatedRequest()而不是Google_AnalyticsService:
$req = new Google_HttpRequest($apiUrl); $resp = $client::getIo()->authenticatedRequest($req); $result = json_decode($resp->getResponseBody(),true);
这种替代方案也适用于开发服务器,但不适用于生产.
我完全没有这个想法.有人看到这个/固定吗?
谢谢!