3

我正在 PHP 中创建一个使用 Google Analytics 报告 API 的内部应用程序。该应用程序将始终使用相同的 Google 帐户连接到 Analytics,因此我只想在我的数据库中保留访问令牌和刷新令牌。

我使用以下Google 教程来设置 OAuth。我采取了以下步骤:

引导代码(每一步)

$client = new apiClient();
$client->setApplicationName("Stat-robot");
$client->setApprovalPrompt("force");            
$client->setAccessType('offline');
$client->setClientId("CLIENT_ID");
$client->setClientSecret("CLIENT_SECRET");
$client->setDeveloperKey("DEV_KEY");
$client->setRedirectUri("http://localhost/statistics/api");
$client->setScopes("https://www.googleapis.com/auth/analytics.readonly");

步骤1

Redirect to the URL retrieved from $client->createAuthUrl())

第2步

//Get a redirect from Google with a GET-variable 'code'
$client->authenticate();
$accessToken = $client->getAccessToken
//This gives me a JSON-format access-token

第 3 步

//Set the access token retrieved in previous request
$client->setAccessToken($accessToken);
//set the refresh token from the JSON response
$client->refreshToken($refreshToken);

现在,最后一部分 ( refreshToken) 给了我一个错误:invalid_grant。我在 SO 和其他互联网上阅读过,我应该将我的访问类型设置为,offline并将我的批准提示设置为force. 但我想我有(看上面)。

那么出了什么问题呢?

编辑:我正在阅读 Google API 本身的源代码。OAuth 类中的sign()方法指定以下内容:

if ($expired) {
    if (! array_key_exists('refresh_token', $this->accessToken)) {
        throw new apiAuthException("The OAuth 2.0 access token has expired, "
            . "and a refresh token is not available. Refresh tokens are not "
            . "returned for responses that were auto-approved.");
      }
      $this->refreshToken($this->accessToken['refresh_token']);
    }
}

所以真的没必要打电话$client->refreshToken()

4

2 回答 2

0

我通过更改范围解决了 invalid_grant 错误...

googleapi.authorize({ client_id : '你的客户 ID', client_secret : '你的客户秘密', redirect_uri : ' ', scope : ' https://www.googleapis.com/auth/userinfo.profile https://www. googleapis.com/auth/userinfo.email ' }).done(function(data) {

            });
于 2014-10-29T06:26:34.880 回答
0

为了解决收到的错误“invalid_grant”,谷歌建议更新你的服务器时钟,检查你是否达到了最大的 api 调用。

于 2014-05-12T14:14:41.890 回答