Google服务帐户示例返回“刷新OAuth2令牌时出错{”错误“:”invalid_grant“}”

时间:2014-07-04 10:18:28

标签: php symfony google-fusion-tables google-api-php-client service-accounts

我的目标是代表我的网络应用用户在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"
}'

我用谷歌搜索了几天,大多数答案都在谈论刷新令牌。我做了这个刷新,但仍然是同样的错误!

解决这个问题的任何想法? 感谢

3 个答案:

答案 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帐户来解决了这个问题。