API Календаря Google Вставить событие без авторизации

1

Мне нужно разрешить пользователям на моем сайте вставлять событие в наш календарь Google. Это система бронирования, в которой пользователь выбирает услугу, подтверждает, и новое событие автоматически добавляется в наш календарь. Проблема в том, что у меня есть кнопка авторизации на странице клиента, которая мне не нужна.

<button id="authorize-button" onclick="handleAuthClick(event)">Authorize</button>

Поэтому я думаю, что мне нужна авторизация учетной записи службы. Но я не знаю, как использовать сгенерированный ключ json и p12 в javascript. Мне нужен образец или, по крайней мере, понять, что мне нужно делать.

Код JS:

var CLIENT_ID = '*********.apps.googleusercontent.com';
var API_KEY = 'AIza***********************';
var SCOPES = ["https://www.googleapis.com/auth/calendar"];

function handleClientLoad() {
  gapi.client.setApiKey(API_KEY);
  window.setTimeout(checkAuth, 1);
}

function checkAuth() {
  gapi.auth.authorize({
    client_id: CLIENT_ID,
    scope: SCOPES,
    immediate: true
  }, handleAuthResult);
}

function handleAuthResult(authResult) {
  var authorizeButton = document.getElementById('authorize-button');
  if (authResult && !authResult.error) {
    authorizeButton.style.visibility = 'hidden';
  } else {
    authorizeButton.style.visibility = '';
    authorizeButton.onclick = handleAuthClick;
  }
}

function handleAuthClick(event) {
  gapi.auth.authorize({
    client_id: CLIENT_ID,
    scope: SCOPES,
    immediate: false
  }, handleAuthResult);
  return false;
}

PS - Сайт находится на php.

Теги:
google-calendar

1 ответ

0
Лучший ответ

Да, мне нужно было использовать учетную запись службы с php sdk. Вы загружаете ключ p12, загружаете на сервер, а затем:

require_once ('../src/Google/autoload.php');

$client_id = '{your_code}.apps.googleusercontent.com'; //Client ID
$service_account_name = '{your_email}@developer.gserviceaccount.com'; //Email Address
$key_file_location = $_SERVER['DOCUMENT_ROOT'] .'{file}.p12'; //key.p12
$client = new Google_Client(); //AUTHORIZE OBJECTS
$client->setApplicationName("App Name");

//INSTATIATE NEEDED OBJECTS (In this case, for freeBusy query, and Create New Event)
$service = new Google_Service_Calendar($client);
$id = new Google_Service_Calendar_FreeBusyRequestItem($client);
$item = new Google_Service_Calendar_FreeBusyRequest($client);
$event = new Google_Service_Calendar_Event($client);
$startT = new Google_Service_Calendar_EventDateTime($client);
$endT = new Google_Service_Calendar_EventDateTime($client);


if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/calendar'),
    $key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

/************************************************
  MAIN FUNCTIONS
 ************************************************/

function GetFreeBusy($calendar_id, $calendar_date) {
  global $id; //GET OBJECTS FROM OUTSIDE
  global $item;
  global $service;
  $arrayTime = array();
  $id->setId($calendar_id);
  $item->setItems(array($id));
  $item->setTimeZone('Europe/Rome');
  $item->setTimeMax("{$calendar_date}T18:00:00+02:00");
  $item->setTimeMin("{$calendar_date}T08:00:00+02:00");
  $query = $service->freebusy->query($item);

  $start = $query["calendars"][$calendar_id]["busy"];
  $end = $query["calendars"][$calendar_id]["busy"];

  $length = count($start);
  for ($i = 0; $i < $length; $i++) {
    $startTime = $start[$i]["start"];
    $endTime = $start[$i]["end"];

    list($a, $b) = explode('T', $startTime);
    list($startHour, $d) = explode(':00+', $b);
    list($e, $f) = explode('T', $endTime);
    list($endHour, $g) = explode(':00+', $f);
    array_push($arrayTime, array($startHour, $endHour));
    // I CREATED AN ARRAY FOR MY NEEDS ex. [ ["8:00", "10:00"], ["14:00", "14:30"] ]
  }
  return $arrayTime;
}

function CreateEvent($calendarId, $summary, $location, $description, $date, $start, $end) {

  global $service;
  global $event;
  global $startT;
  global $endT;

  $startT->setTimeZone("Europe/Rome");
  $startT->setDateTime($date."T".$start.":00");
  $endT->setTimeZone("Europe/Rome");
  $endT->setDateTime($date."T".$end.":00");

  $event->setSummary($summary);
  $event->setLocation($location);
  $event->setDescription($description);
  $event->setStart($startT);
  $event->setEnd($endT);

if($insert = $service->events->insert($calendarId, $event)) {
  return true;
}

}

Вы открываете свой календарь и добавляете его с помощью {your_email}@developer.gserviceaccount.com. Теперь любой пользователь может создавать события для моего кал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню