我的目标是代表Web应用程序用户在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返回的错误是相同的。

评论


如何检查我的机器时间是否不同。请帮忙

–巴布德·凯斯瓦尼(Bhupender Keswani)
2015年10月9日,11:57

@BhupenderKeswani使服务器时间保持同步的最简单方法是使用NTP。要检查服务器上的当前时间,请使用date命令。

–比约恩
2015年10月10日9:49



哇,谢谢比约恩的小费。我尝试了许多其他可能性。 :)

–美浓
2015年11月26日下午5:34

#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解决了它。