Google Cal API - 检查事件的脚本

时间:2016-02-24 00:47:28

标签: php google-calendar-api google-api-php-client

我想构建一个脚本,通过Google Calendar PHP客户端检查经过身份验证的用户的Google日历。我能够构建一个简单的页面,让用户Auth并授予日历事件的权限。我收到一个令牌,然后通过以下方式抓住15个即将发生的事件:

$googleCal = new Google_Service_Calendar($googleClient);
$results = $googleCal->events->listEvents($calendarId, $optParams);

但我正在努力的是如何保存这个,所以我每天都可以检查一下脚本,看看是否有新的事件被添加。我认为我所拥有的只是努力克服终点线。

谢谢!

-

更新,我正在尝试使用刷新令牌,这是我的代码:

public function checkRedirectCode()
  {
        if(isset($_GET['code']))
        {
              $this->client->authenticate($_GET['code']);

        //    $this->setToken($this->client->getRefreshToken());
              $this->setToken($this->client->getAccessToken());

              $this->storeUser($this->getPayload());

              return true;
        }

        return false;
  }

  public function setToken($token)
  {
              $_SESSION['access_token'] = $token;
              $this->client->setAccessToken($token);

  }

我已经能够回显刷新令牌,所以我知道我得到了一个正确的刷新令牌但是每当我使用注释掉的字符串时我都会收到错误。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要使脚本在原始访问令牌的生命周期之外被调用(仅持续一个小时),您将需要在初始授权期间检索并存储刷新令牌,然后使用它来生成新访问权限每次脚本运行时都会出现令牌。

  

访问令牌的生命周期有限。如果您的应用需要访问权限   对于超出单一访问令牌生命周期的Google API,它可以   获取刷新令牌。刷新令牌允许您的应用程序   获得新的访问令牌。

https://developers.google.com/identity/protocols/OAuth2#basicsteps(4。如有必要,请刷新访问令牌。)

用户对您的应用进行身份验证后,会使用code查询字符串将其返回到您的重定向URI。

以下是验证和获取刷新令牌的示例(这使用了Analytics,但对于其他服务应该是相同的):

$client = new Google_Client();
$client->setClientId('xxx');
$client->setClientSecret('xxx');
$client->setRedirectUri('xxx');

//authenticate with the code returned from google
$authenticate = $client->authenticate($_GET['code']);

//get the refresh token
$refreshToken = $client->getRefreshToken();

//store refresh token in database...

然后,当您运行每日脚本时,使用刷新令牌(从数据库中检索)生成新的访问令牌:

$client = new Google_Client();
$client->setClientId('xxx');
$client->setClientSecret('yyy');
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);

$client->refreshToken($user->refresh_token);
$newToken = $client->getAccessToken();
$client->setAccessToken($newToken);