我與谷歌API疼痛持續...與谷歌的API客戶端的PHP刷新令牌
我能使用腳本來使用刷新令牌 - 自動刷新並保持我對活着的壓延機的訪問。我可以與日曆互動,一切都很好。
我現在想繼續使用PHP的谷歌API客戶端,我昨天有這個工作,雖然我的令牌是有效的,但現在這已過期我無法解決如何使用刷新令牌來獲得新的令牌,並在將來到期時繼續進行身份驗證。
我已經找到了一些參考和嘗試這些 - 這是我的測試腳本,到目前爲止基礎上,simple.php例如:
<?php
require_once '../../src/Google_Client.php';
require_once '../../src/contrib/Google_CalendarService.php';
session_start();
$client = new Google_Client();
$client->setAccessType('offline');
$client->setApplicationName("Downs Golfmanager");
// Visit https://code.google.com/apis/console?api=calendar to generate your
// client id, client secret, and to register your redirect uri.
$client->setClientId('XXXXXX.apps.googleusercontent.com');
$client->setClientSecret('XXXXXX');
$client->setRedirectUri('XXXXXX');
$client->setDeveloperKey('XXXXXX');
$client->refreshToken('X/XXXXX');
$client->setUseObjects(true);
$cal = new Google_CalendarService($client);
if (isset($_GET['logout'])) {
unset($_SESSION['token']);
}
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->isAccessTokenExpired()) {
/
echo 'Access Token Expired'; // Debug
//$client->refreshToken($refreshToken);
}
if ($client->getAccessToken()) {
$event = new Google_Event();
$event->setSummary('Appointment');
$event->setLocation('Somewhere');
$start = new Google_EventDateTime();
$start->setDateTime('2013-08-28T14:00:00.000+01:00');
$event->setStart($start);
$end = new Google_EventDateTime();
$end->setDateTime('2013-08-28T15:25:00.000+01:00');
$event->setEnd($end);
$createdEvent = $cal->events->insert('[email protected]', $event);
//echo "<pre>" . print_r($createdEvent, true) . "</pre>";
echo $createdEvent->getId();
//test pulling events
$events = $cal->events->listEvents('[email protected]');
while(true) {
foreach ($events->getItems() as $event) {
echo $event->getSummary();
}
$pageToken = $events->getNextPageToken();
if ($pageToken) {
$optParams = array(
'pageToken' => $pageToken,
'timeMin'=>'2013-08-26T00:00:00+01:00',
'timeMax'=>'2013-08-31T00:00:00+01:00'
);
$events = $cal->events->listEvents('[email protected]', $optParams);
} else {
break;
}
}
//print "<h1>Events List</h1><pre>" . print_r($events, true) . "</pre>";
$calList = $cal->calendarList->listCalendarList();
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
$_SESSION['token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
與我以前的帖子我不清楚應該是什麼去這裏。我的令牌已過期 - 我有刷新令牌。每次訪問時,我需要對代碼進行哪些更改才能自動刷新授權。
編輯:錯誤代碼是:The OAuth 2.0 access token has expired, and a refresh token is not available
我註釋掉了幾個上面,我想包括在我嘗試更多的線路來解決只是爲了儘量避免混淆進一步
謝謝
你知道一種方法,我可以強制訪問令牌過期,所以我可以測試請求使用刷新令牌的新訪問令牌嗎? – Anagio
我認爲(但不是100%)他們只有3600ms的短時間?我通過在其上進行測試來測試刷新:)我從內存中想到,您可以在您所做的調用中的參數中指定令牌的壽命。我發現很多有用的信息來自oauth playground – Ray
感謝我知道了它,當它過期時我感到困惑,我仍然獲取數據,我的代碼沒有條件來檢查訪問令牌是否過期,或者使用刷新令牌來獲得新的。你的代碼幫助,我得到了它的工作。 – Anagio