2016-09-19 220 views
1

因此,我從字面上複製了Google示例代碼(https://developers.google.com/google-apps/calendar/quickstart/php)中的代碼,並儘可能按照其說明操作,然後我的日曆工作得很好。但我今天進來了,意識到它停止了工作,我無法弄清楚什麼是錯的。Google Calendar API getRefreshToken

我相信我的問題的根源是這一行:

$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 

,因爲該行給了我這個錯誤

未捕獲LogicException:刷新令牌必須傳入或設置爲setAccessToken的一部分

也有類似的問題(Get refresh token google api,Not receiving Google OAuth refresh token)但我似乎不能這樣我的問題與他們的答案。

另一個說明; $client->getRefreshToken()似乎在返回null當我測試它,這就是爲什麼我認爲$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());失敗。


所以這是一段代碼直接從是有問題的例子

// Refresh the token if it's expired. 
if ($client->isAccessTokenExpired()) { 
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 
    file_put_contents($credentialsPath, json_encode($client->getAccessToken())); 
} 

這一段代碼給我的錯誤,因爲$client->getRefreshToken()null,但我是我所需要的前提下,使用刷新令牌獲取新令牌,如果沒有刷新令牌,我不能這樣做?


另外請注意,這已經被設定在通話開始時

$client->setAccessType('offline'); 
$client->setApprovalPrompt('force'); 

回答

1

請注意,訪問令牌的使用壽命有限,當它發生時,這會導致您的日曆停止工作。因此,如Token expiration中所建議的那樣,您應該在代碼中編寫預測授予的令牌可能不再有效的可能性。這是刷新令牌變得非常有用的地方,它允許您的應用程序獲得新的訪問令牌,而無需再次通過授權過程。

要請求refresh token,請將access_type=offline添加到您的驗證請求中。但是,此GitHub post建議您可以通過在請求中提供參數 access_type=offline&approval_prompt=force來獲取刷新令牌。

欲瞭解更多有用的技巧,我認爲下面的鏈接將是有益的:

+0

是的,我已經設置的標誌,因爲他們在這個例子中。而且我知道它應該被刷新,這就是線條評論爲'刷新標記,如果它過期.'應該是做的,但我沒有得到一個新的關鍵 –

+0

我已經添加了一部分我的問題有希望進一步澄清 –