我的目标是代表我的网络应用用户在Google Fusion Tables
上进行最简单的查询。为此,我在Google控制台上创建了服务帐户。这是代码:
// Creating a google client
$client = new \Google_Client();
// setting the service acount credentials
$serviceAccountName = 'XXXXX.apps.googleusercontent.com';
$scopes= array(
'https://www.googleapis.com/auth/fusiontables',
'https://www.googleapis.com/auth/fusiontables.readonly',
);
$privateKey=file_get_contents('/path/to/privatekey.p12');
$privateKeyPassword='notasecret'; // the default one when generated in the console
$credential = new \Google_Auth_AssertionCredentials($serviceAccountName,
$scopes, $privateKey, $privateKeyPassword);
// setting assertion credentials
$client->setAssertionCredentials($credential);
$service = new \Google_Service_Fusiontables($client);
$sql = 'select name from XXXXXXXX';
$result = $service->query->sql($sql);
运行此代码后,我收到此错误:
Error refreshing the OAuth2 token, message: '{
"error" : "invalid_grant"
}'
我用谷歌搜索了几天,大多数答案都在谈论刷新令牌。我做了这个刷新,但仍然是同样的错误!
解决这个问题的任何想法? 感谢
答案 0 :(得分:11)
在我的情况下,这是由于服务器的时间太远(大约5分钟)造成的。
虽然您的问题已经解决,但对于将来登陆此处的人来说,这可能会有任何帮助,因为Google返回的错误是相同的。
答案 1 :(得分:9)
我知道很多人都像我一样面临同样的问题。所以,这是谷歌搜索几天后的解决方案。
我建议的代码只有一个错误:客户端ID类似于类似于123456789-abcdebsbjf@developer.gserviceaccount.com
的电子邮件
您要做的第二件事是与Google服务帐户的客户ID共享您在google fusion table中查询的表格。
之后,事情会完美无缺。
我希望这会对其他人有所帮助。
答案 2 :(得分:0)
我在谷歌分析API中遇到同样的错误,我已经通过添加Service accounts Email address
google analytic帐户来解决了这个问题。