Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Google Cal API-检查事件的脚本_Php_Google Calendar Api_Google Api Php Client - Fatal编程技术网

Php Google Cal API-检查事件的脚本

Php Google Cal API-检查事件的脚本,php,google-calendar-api,google-api-php-client,Php,Google Calendar Api,Google Api Php Client,我想构建一个脚本,通过GoogleCalendarPHP客户端检查经过身份验证的用户的GoogleCalendar。我能够构建一个简单的页面,允许用户对日历事件进行身份验证和授予权限。我收到一个代币,然后通过以下方式获取15个即将举行的活动: $googleCal = new Google_Service_Calendar($googleClient); $results = $googleCal->events->listEvents($calendarId, $optParams

我想构建一个脚本,通过GoogleCalendarPHP客户端检查经过身份验证的用户的GoogleCalendar。我能够构建一个简单的页面,允许用户对日历事件进行身份验证和授予权限。我收到一个代币,然后通过以下方式获取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);

  }

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

要使您的脚本能够在原始访问令牌的生存期(仅持续一个小时)之后被调用,您需要在初始授权期间检索并存储刷新令牌,然后在每次脚本运行时使用它生成新的访问令牌

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

(4.如有必要,刷新访问令牌。)

用户对应用程序进行身份验证后,它们将返回到您的重定向URI,并带有
code
查询字符串

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

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

$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);

您是否尝试过使用“getEventsForDay(date)”?这将为您提供在给定日期发生的所有事件。您返回的令牌仅在一小时内有效,因此请确保使用刷新令牌,否则您将无法每天运行脚本。如果你想让我分享如何做到这一点,请告诉我,如果你已经这么做了,请道歉。@jksn.co如果你有一个例子,我会喜欢的@克丽索森将此工作分为两部分。1) 您的原始脚本工作正常,只需将刷新令牌保存到数据库中,此时不需要使用刷新令牌。2) 构建一个每天(在cron上)运行的脚本,使用刷新令牌(如下面我的回答中所示)。你能看看我在最初的帖子中所做的更新吗?我一直在尝试使用我的刷新代码,我正确地得到了它(你可以看到注释掉的行),但它不起作用。想法?刷新令牌时,是否需要设置范围?或者可以在没有任何显式作用域的情况下检索新的访问令牌吗?
$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);