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"
}'
我谷歌搜索了好几天,大多数答案都在谈论刷新令牌。我做了一次刷新,但仍然遇到相同的错误!
解决这个问题的任何想法吗?
谢谢
#1 楼
在我的情况下,这是由于服务器的时间间隔过长(大约5分钟)引起的。尽管您的问题已经解决,但对于将来在此居住的人来说,这可能会有所帮助Google返回的错误是相同的。
#2 楼
我知道许多人都面临着与我相同的问题。因此,这是在Google上搜索几天后的解决方案。我提出的代码只有一个错误:客户端ID类似于类似
123456789-abcdebsbjf@developer.gserviceaccount.com
的电子邮件第二个您要做的就是与服务帐户的客户ID共享您在google融合表中查询的表。
之后,事情就可以正常工作了。
我希望这对其他人有帮助。
评论
我正在尝试做类似的事情stackoverflow.com/questions/21470405/…,这给了我同样的错误!
–迈克·沃伦(Mike Warren)
2014年11月17日在1:47
您应该创建$ client并首先设置其凭据,然后使用SpreadsheetService
–阿米·贾卢里(Amine Jallouli)
2014年11月17日下午2:20
amine jallouli,您能否详细说明一下,作为我刚刚提出的这个问题的答案:stackoverflow.com/questions/26965299/…?
–迈克·沃伦(Mike Warren)
2014年11月17日下午4:01
创建$ client是什么意思?我应该调用哪些方法,参数是什么?
–迈克·沃伦(Mike Warren)
2014年11月17日下午5:19
在我的问题中,我给出了如何创建\ Google_Client(),然后创建\ Google_Auth_AssertionCredentials,最后创建\ Google_Service_Fusiontables。您必须按照以下步骤。对于您的情况,您将使用`Google \ Spreadsheet \ SpreadsheetService`。
–阿米·贾卢里(Amine Jallouli)
2014年11月17日下午13:12
#3 楼
我在google analytics API中遇到了相同的错误,已通过使用google analytic帐户添加我的Service accounts Email address
解决了它。
评论
如何检查我的机器时间是否不同。请帮忙
–巴布德·凯斯瓦尼(Bhupender Keswani)
2015年10月9日,11:57
@BhupenderKeswani使服务器时间保持同步的最简单方法是使用NTP。要检查服务器上的当前时间,请使用date命令。
–比约恩
2015年10月10日9:49
哇,谢谢比约恩的小费。我尝试了许多其他可能性。 :)
–美浓
2015年11月26日下午5:34