API Google Calendar v3 (php), использующий токен обновления, чтобы создать новый токен доступа, а затем опубликовать новое событие в календаре

Я работал с документами, и до сих пор мне удалось добавить новое событие в мой календарь, используя свои учетные данные для авторизации из консоли разработчиков Google и фрагмент кода здесь

https://developers.google.com/google-apps/calendar/v3/reference/events/insert

<?php$client = new Google_Client();
// OAuth2 client ID and secret can be found in the Google Developers Console.
$client->setClientId('xxxxx.apps.googleusercontent.com');
$client->setClientSecret(xxxxx);
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$client->addScope('https://www.googleapis.com/auth/calendar');
$client->setAccessType('offline');
$client->setApprovalPrompt('force');$service = new Google_Service_Calendar($client);$authUrl = $client->createAuthUrl();//Request authorization
print "Please visit:\n$authUrl\n\n";
print "Please enter the auth code:\n";//$authCode = trim(fgets(STDIN));
$authCode = '';// Exchange authorization code for access token
$accessToken = $client->authenticate($authCode);$client->setAccessToken($accessToken);$event = new Google_Service_Calendar_Event();
$event->setSummary('Appointment);
$event->setLocation('Somewhere');
$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime('2014-12-22T10:00:00.000-07:00');
$event->setStart($start);
$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime('2014-12-22T10:00:00.000-08:00');
$event->setEnd($end);
$attendee1 = new Google_Service_Calendar_EventAttendee();
$attendee1->setEmail(xxx@gmail.com');
// ...
$attendees = array($attendee1);
$event->attendees = $attendees;
$createdEvent = $service->events->insert('xxxxx@group.calendar.google.com', $event);echo $createdEvent->getId();?>

Это работает, но мне нужно каждый раз получать новый токен доступа OAuth2.0.
Я хочу использовать токен обновления для автоматической генерации нового токена доступа, чтобы я мог добавлять новые события gcal со своей веб-страницы.

Если я запускаю следующий код, я могу успешно сгенерировать новый токен доступа, используя токен обновления

<?phpfunction getAccessToken(){
$tokenURL = 'https://accounts.google.com/o/oauth2/token';
$postData = array(
'client_secret'=>'xxxxx',
'grant_type'=>'refresh_token',
'refresh_token'=>'xxxxx',
'client_id'=>'xxxx.apps.googleusercontent.com'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $tokenURL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//need this otherwise you get an ssl error
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tokenReturn = curl_exec($ch);
$token = json_decode($tokenReturn);
//var_dump($tokenReturn);
$accessToken = $token->access_token;

return ($accessToken);
}
?>

Это всегда дает мне новый токен доступа, но если я добавлю этот токен в код в верхней части страницы, я получу ошибку.
Google_Auth_Exception «с сообщением» Срок действия маркера доступа OAuth 2.0 истек, а токен обновления недоступен

Я пытался вернуть только токен доступа, возвращаемое значение, возвращаемое значение, декодированное с помощью json, но я всегда получаю какую-то ошибку

Кто-нибудь может указать мне правильное направление или фрагмент кода, который позволит мне вставить новое событие в мой календарь?

Спасибо

Спасибо за ссылку SGC

Я думаю, что причина первоначального сбоя заключается в том, что функция создания нового токена доступа с использованием токена обновления возвращает только 3 значения, сам «access_token», «token_type» и «expires_in».

При вызове setAccessToken () также требуется значение «refresh_token» и «созданное» значение.

У меня уже был токен обновления, но я не совсем понял, «создан» ли он, когда был создан токен обновления или токен доступа, и изменится ли это значение?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector