0

Я изучаю Google Calendar api, чтобы синхронизировать пользовательские события Google с событиями на моем сайте. Сначала мне было сделано, чтобы войти в систему с помощью gmail и получить разрешение от учетной записи пользователя в автономном режиме доступ. Мой кодПользователь сайта, связанный с их учетной записью gmail постоянно. Если пользователю разрешен доступ к их данным

<?php 
 
require_once __DIR__.'/vendor/autoload.php'; 
 

 
session_start(); 
 

 
$client = new Google_Client(); 
 
$client->setAuthConfigFile(__DIR__.'/client_secrets.json'); 
 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/google4/oauth2callback.php'); 
 
$client->addScope(Google_Service_Calendar::CALENDAR_READONLY); 
 
$client->setAccessType('offline'); 
 
$client->setApprovalPrompt('force'); 
 
$client->setIncludeGrantedScopes(true); 
 
//echo $_GET['access_token'].' '.$_GET['code']; 
 
if (!isset($_GET['code']) && !isset($_SESSION['access_token'])) { //echo "werwe";exit; 
 
    $auth_url = $client->createAuthUrl(); 
 
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 
 
} else { 
 
    $db = mysql_connect('localhost','root',''); 
 
    mysql_select_db('google',$db); 
 
    //echo $_SESSION['refresh_token']; 
 
    $client->refreshToken($_SESSION['refresh_token']); 
 
    $client->authenticate($_GET['code']); 
 
    // $client()->getRefreshToken(); 
 
    $_SESSION['access_token'] = $client->getAccessToken(); 
 
    //print_r($_SESSION['access_token']);exit; 
 
    // 
 
    $sql = "update google set access_token='".$_SESSION['access_token']['refresh_token']."' WHERE userId = '".$_SESSION['userId']."'"; 
 
    mysql_query($sql); 
 
    $_SESSION['refresh_token']=$_SESSION['access_token']['refresh_token']; 
 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/google4'; 
 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
 
} 
 
?>

когда пользователь разрешен доступ к данным из API Google возвращает массив как

[ 
    access_token => xxx, 
    token_type => bearer, 
    created => xxx, 
    expires_in => 3600, 
    refresh_token => xxx 
] 

Используя этот маркер доступа я получаю данные события, Мой код

<?php 
 
require_once __DIR__.'/vendor/autoload.php'; 
 
//error_reporting(E_PARSE); 
 
session_start(); 
 

 
$client = new Google_Client(); 
 
$client->setAuthConfig(__DIR__.'/client_secrets.json'); 
 
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY); 
 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/google4/oauth2callback.php'); 
 
$client->setAccessType('offline'); 
 
echo "<a href='logout.php'> logout </a>"; 
 

 
if (isset($_SESSION['access_token']) &&   $_SESSION['refresh_token']) { 
 
    $client->refreshToken($_SESSION['refresh_token']); 
 
    $client->setAccessToken($_SESSION['access_token']); 
 
    $service = new Google_Service_Calendar($client); 
 

 
    $calendarId = 'primary'; 
 
    $optParams = array(
 
     'maxResults' => 10, 
 
     'orderBy' => 'startTime', 
 
     'singleEvents' => TRUE, 
 
     'timeMin' => date('c'), 
 
    ); 
 
$results = $service->events->listEvents($calendarId, $optParams); 
 

 
    if (count($results->getItems()) == 0) { 
 
    print "No upcoming events found.\n"; 
 
    } else { 
 
    print "Upcoming events:\n"; 
 
    foreach ($results->getItems() as $event) { 
 
    $start = $event->start->dateTime; 
 
    if (empty($start)) { 
 
     $start = $event->start->date; 
 
    } 
 
    printf("%s (%s)\n", $event->getSummary(), $start); 
 
    } 
 
} 
 

 
} else { 
 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/google4/oauth2callback.php'; 
 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
 
}

Я получаю данные о событиях, но когда сеанс истекает, как получить данные пользователя?

что я должен хранить для этого пользователя, поэтому я могу получить доступ к данным календаря пользователя в автономном режиме, чтобы сайт подключался напрямую к их учетной записи, если у меня есть разрешение на автономный доступ?

Как я получаю данные из пользовательского календаря каждый раз, если сеанс заканчивается с использованием сохраненных пользовательских данных?

ответ

1

Google позволил автономный доступ в течение 60 дней (пожалуйста, убедитесь, текущую политику от google.com) Чтобы получить доступ в автономном режиме вам необходимо пройти следующий флаг с вашим запросом OAuth

access_type=offline 

Пожалуйста, обратите внимание, следующий флаг полезен при вы хотите задать отключенный доступ принудительно

approval_prompt=force 

Таким образом, каждый раз, когда вам нужно, чтобы получить Google данные доступа вам необходимо запросить токен обновления с лексемами данных предыдущего доступа. Вы должны сохранить данные токена доступа в своей базе данных.

+0

Я помещаю это в свой код, но я не знаю, какое хранилище данных в моей базе данных, чтобы я мог передать его в Google, и я получаю события из учетной записи пользователя. – user3256212

+0

Если вы знаете о каком-либо ** демо-коде для этого, пожалуйста, поделитесь ссылкой со мной. – user3256212

+0

Извините, код связан с другим проектом, поэтому его нельзя использовать. попытайтесь получить токен обновления, вы получите доступ к этим данным только по области. пожалуйста, не пытайтесь получить другие данные, которые пользователь не разрешил. –

Смежные вопросы