2012-09-13 94 views
1

我的问题非常简单,我使用的是带有PHP脚本的Google Calendar API。Google Calendar API授权始终询问

我的脚本正在运行,但无法使用cron运行它,因为我需要始终授权我的应用程序。

有没有办法做我想要的?

这里是我的代码:

<?php 
require_once 'google/Google_Client.php'; 
require_once 'google/contrib/Google_CalendarService.php'; 
session_start(); 


$client = new Google_Client(); 
$client->setApplicationName("Google Calendar PHP Starter Application"); 
$client->setClientId([MY APP ID]); 
$client->setClientSecret([MY SECRET TOKEN]); 
$client->setRedirectUri([MY REDIRECT URI]); 
$client->setDeveloperKey([MY DEV KEY]); 
$cal = new Google_CalendarService($client); 
if (isset($_GET['logout'])) { 
    unset($_SESSION['token']); 
} 

/* 
** Request token from API 
*/ 
if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); 
} 


if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} 

if ($client->getAccessToken()) { 


    // MY CODE GOES HERE 


    } else { 

    $authUrl = $client->createAuthUrl(); 
    print "<a class='login' href='$authUrl'>Connect Me!</a>"; 
} 


?> 

谢谢!

回答

0

不知道你是否有这个问题的答案,但我有同样的问题一次。 Google Api会返回一个Oauth访问令牌。该令牌无限期地持续,但在您的代码中,您将其存储在$ _SESSION变量中,该变量具有保留的时间跨度。尝试使用$token = $client->getAccessToken();以将访问令牌放入变量中,然后以其他某种形式(如数据库)存储该令牌。然后,在检查$_SESSION['token']是否已设置时,如果不是,则可以查询数据库以检索令牌并使用$client->setAccessToken($queryResult);只要您拥有该访问令牌,API就会处理剩下的部分。