2013-04-23 80 views
1

我試圖使用服務帳戶從我的Google日曆中獲取事件。我收到的訪問令牌:Google Calendar API。服務帳戶。訪問令牌已過期。無需RT即刷新AT

{"access_token":"ya29.AHES6ZR9o2-cut-Gg","expires_in":3600,"created":1366631471}

現在這個令牌過期,當我試圖讓事件,我得到一個錯誤:

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.

我試圖找到辦法讓API新的訪問令牌文檔,但沒有找到合適的東西。現在我有一個問題:我如何刷新我的訪問令牌?

代碼,我用它來訪問日曆:

session_start(); 

require_once '../../src/Google_Client.php'; 
require_once '../../src/contrib/Google_CalendarService.php'; 

define('SERVICE_ACCOUNT_NAME', '[email protected]'); 
define('CLIENT_ID', 'numbers-and-letters.apps.googleusercontent.com'); 

define('KEY_FILE', '../../key.p12'); 

$client = new Google_Client(); 
$client->setApplicationName("app name"); 

$client->setUseObjects(true); 

$client->setClientID(CLIENT_ID); 

$key = file_get_contents(KEY_FILE); 

if (isset($_SESSION['token'])) 
{ 
$client->setAccessToken($_SESSION['token']); 
$client->setaccessType('offline'); 
} 
else 
{ 
    $client->setAssertionCredentials(new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME, 
    array('https://www.googleapis.com/auth/calendar.readonly'), 
    $key 
)); 
} 

try 
{ 
    $cal = new Google_CalendarService($client); 
    $events = $cal->events->listEvents('[email protected]'); 
print_r($events); 
} catch (Exception $e) echo $e->getMessage(); 

if ($client->getAccessToken()) { 
    $_SESSION['token'] = $client->getAccessToken(); 
} 
+0

嗨斯坦。歡迎來到SO!您不應將問題的答案添加爲問題的附錄,而應提交您自己的問題的答案並接受該答案。回答你自己的問題完全沒問題。此外,這個問題將不再出現在「無答案的問題」部分,這有助於過濾這些問題。當然,通過這種方式,答案對於和你有同樣問題的未來用戶更爲明顯。喔! – blubb 2013-04-23 08:02:47

+0

好!感謝您的澄清 – stan 2013-04-23 08:33:56

回答

0

我解決了!要刷新訪問令牌不刷新令牌,你要調用Google_Client類的方法revokeToken()

0

推薦的方式來刷新標記爲:

if ($client->isAccessTokenExpired()) 
{ 
    $client->getAuth()->refreshTokenWithAssertion(); 
} 
相關問題