2012-08-17 129 views
0

我使用PHP的谷歌日曆API的v3。如何以及何時使用刷新令牌與PHP谷歌日曆api

在日曆所有者授權後,我使用數據庫中的刷新標記保存access_token。

當任何人顯示日曆頁我有代碼的這一點點的作品

$client = new apiClient(); 
$client->setApplicationName("My Calendar"); 
$client->setAccessType('offline'); 
$client->setAccessToken($_SESSION['google']['access_token']); 
$calService = new apiCalendarService($client); 
$optParams = array('timeMin' => $gstart, 'timeMax'=> $gend); 
$events = $calService->events->listEvents($_SESSION['google']['google_cal_id'], $optParams); 

我在文檔看出,在某些時候,我可能需要使用刷新標記(我有在數據庫中。) 我不知道的是如何使用這個令牌和何時。在某個時候setAccessToken會拋出一個異常嗎?什麼是最好的方法來測試這個以及 謝謝

回答

2

刷新令牌用於如果你想保持身份驗證活動沒有用戶重新認證。例如,我們有一個使用谷歌分析API的報告工具。我需要每10分鐘運行一次查詢,因此一旦用戶對我們的應用程序進行身份驗證,我就使用刷新令牌,這樣即使用戶未登錄時我的自動查詢也可以運行。基本上,刷新令牌用於保持會話活動沒有用戶交互。我希望這是有道理的。

+0

那麼你每次都這樣做?這裏是我困惑的地方,如果它從數據庫(包括刷新標記的整個JSON)和$ client-> setAccessToken($ _SESSION ['google'] ['access_token'])獲取accesstoken;即使用戶是訪問者未登錄或驗證 – randy 2012-08-17 19:00:55

+0

是的,但它最終會訪問令牌將過期。所以如果你想在一年後能夠使用這個令牌,你將無法做到這一點。在這種情況下,您需要定期使用刷新令牌來防止訪問令牌過期。 – user1289347 2012-08-17 19:05:25

+0

訪問令牌過期時會失敗嗎? - > $ client-> setAccessToken($ _SESSION ['google'] ['access_token']);有沒有關於如何做到這一點的例子?我假設刷新令牌返回一個新的訪問令牌,我用新數據庫替換數據庫中的數據?我想我正在努力的一部分是「週期性」。我不想每次都得到一個新的,我認爲這將是非常有效的。感謝您的幫助 – randy 2012-08-21 15:19:06

2

訪問令牌在3600s或一個小時內過期。但是,您可以使用刷新令牌來獲取新的訪問令牌,而無需用戶重新進行身份驗證。

有關如何獲取刷新令牌使用PHP,看看在這個崗位接受的答案細節: Automatically refresh token using google drive api with php script

如果使用REST API,而不是PHP SDK,它基本上發送您的刷新令牌,CLIENT_ID ,祕密到https://accounts.google.com/o/oauth2/token,如頁面底部所述here

刷新令牌不會過期,除非用戶撤消它或者您以編程方式撤銷它。