разрешить моему пользователю добавлять собрание в мой календарь с Google Calendar API с PHP без авторизации - PullRequest
1 голос
/ 21 мая 2019

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

Я пытался написать что-то с api v2, но у меня возникла проблема, поэтому я хотел бы знать, не могли бы вы указать мне учебник или пример, или просто пример вставки

<?php

require_once './google-api-php-client-2.2.2/vendor/autoload.php';


session_start();
/************************************************   */

$client_id = '751416246659ae431430560098c25ba433c3e483';
$Email_address = ' testecalendar@spartan-grail-241202.iam.gserviceaccount.com';
$key_file_location = './credentials.json';

$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$key = file_get_contents($key_file_location);

// separate additional scopes with a comma   
$scopes = "https://www.googleapis.com/auth/calendar.readonly";
$client->setAuthConfig('./credentials.json');


$service = new Google_Service_Calendar($client);

?>

<html>

<body>

    <?php
    $calendarList  = $service->calendarList->listCalendarList();

    while (true) {
        foreach ($calendarList->getItems() as $calendarListEntry) {

            echo $calendarListEntry->getSummary() . "<br>\n";


            // get events 
            $events = $service->events->listEvents($calendarListEntry->id);


            foreach ($events->getItems() as $event) {
                echo "-----" . $event->getSummary() . "<br>";
            }
        }
        $pageToken = $calendarList->getNextPageToken();
        if ($pageToken) {
            $optParams = array('pageToken' => $pageToken);
            $calendarList = $service->calendarList->listCalendarList($optParams);
        } else {
            break;
        }
    }

    ?>

Я получил эту ошибку:

Неустранимая ошибка: Uncaught Google_Service_Exception: {"error": {"errors": [{"domain": "global", "reason": "required", "message": "Требуется вход в систему", "locationType": "header", "location": "Authorization"}], "code": 401, "message": "Требуется вход в систему"}} в /Users/macbook/Desktop/testcal/google-api-php-client-2.2. 2 / src / Google / Http / REST.php: 118 Трассировка стека: # 0 /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src/Google/Http/REST.php(94 ): Google_Http_REST :: decodeHttpResponse (Объект (GuzzleHttp \ Psr7 \ Response), Объект (GuzzleHttp \ Psr7 \ Запрос), 'Google_Service _...') # 1 / Users / macbook / Desktop / testcal / google-api-php-client -2.2.2 / src / Google / Task / Runner.php (176): Google_Http_REST :: doExecute (Object (GuzzleHttp \ Client), Object (GuzzleHttp \ Psr7 \ Request), 'Google_Service _...') # 2 / Пользователи /macbook/Desktop/testcal/google-api-php-client-2.2.2/src/Google/Http/REST.php(58): Google_Task_Runner-> run () # 3 / Users / macbook / Desktop / testcal / google -api-php-client-2.2.2 / src / Google / Client.php (798): Google_Ht tp_RES в /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src/Google/Http/REST.php в строке 118

1 Ответ

1 голос
/ 22 мая 2019

Доступ к API Календаря Google из приложения PHP без экрана согласия пользователя

Не уверен, если вы действительно хотите пройти через все это (это только один раз :-)), но здесь вы идете ...

«Сервисный аккаунт - это специальный тип аккаунта Google, предназначенный для представления не являющегося человеком пользователя, которому необходимо пройти аутентификацию и авторизоваться для доступа к данным в API Google.»

Идея состоит в том, чтобы авторизовать / поделитьсяВаш календарь с «Сервисной учетной записью» (адресом электронной почты) и аутентифицируйтесь с помощью «Сервисной учетной записи».

Начну с кода:


<?php
// read google calendar from php command line application

require_once './google-api-php-client-2.2.3/vendor/autoload.php';

$client = new Google_Client();
$client->addScope("https://www.googleapis.com/auth/calendar.readonly");

$client->setAuthConfig('client_credentials.json');
$service = new Google_Service_Calendar($client);

$calendarList = $service->calendarList->listCalendarList();

while(true) {

  foreach ($calendarList->getItems() as $calendarListEntry) {
    echo $calendarListEntry->getSummary();
    echo "\n------------------------------\n\n";

    // get events 
    $events = $service->events->listEvents($calendarListEntry->id);

    foreach ($events->getItems() as $event) {
        echo "- " . $event->getSummary() . "\n";
        echo "- " . $event->getStart()->getDateTime() . "\n\n";
    }

  }

  $pageToken = $calendarList->getNextPageToken();

  if ($pageToken) {
    $optParams = array('pageToken' => $pageToken);
    $calendarList = $service->calendarList->listCalendarList($optParams);
  } else {
    break;
  }

}

Как заставить его работать:

Из этого репозитория (https://github.com/googleapis/google-api-php-client/releases)
скачать "google-api-php-"client-2.2.3.zip "и распакуйте" google-api-php-client-2.2.3 "в корень вашего php-приложения.

Далее, вам нужен этот" client_credentials.json " файл. Вы получите его из "Google Cloud Platform". Лучше всего будет создать новый проект, вы можете использовать существующий проект, но вы можете не получить то, что я опишу ниже (вы можете сделать это,суть одна и та же).

После создания и выбора нового проекта
- перейдите в «APIs & Services»> «Библиотека»
- найдите «Календарь» и выберите «Календарь Google API»
- ВКЛЮЧИТЬ

Далее вам нужно «СОЗДАТЬ ПОЛНОМОЧИЯ»
- если вы еще не перенаправлены, перейдите в «API & Services»> «Учетные данные»
- нажмите «Создать учетные данные»> «Помогите мне выбрать»"
- они спросят вас" Какой API вы используете ", выберите" API Календаря Google "
- затем они спросят вас" Откуда вы будете вызывать API? ", Выберите" Другое "Пользовательский интерфейс (например, Windows, инструмент CLI) "
- затем они спросят вас" К каким данным вы будете обращаться? ", Выберите" Данные приложения "
- затем нажмите" Какие учетные данные мне нужны? ""

enter image description here

Теперь вы находитесь на странице «Добавить учетные данные в свой проект»
- заполните «Имя учетной записи службы»
- выберите «Роль» в «Проекте»> «Редактор»
- «Тип ключа»должно быть "JSON"
- нажмите "Продолжить", и вам будет предложено загрузить этот файл "нечто-что-то.json" (вы можете сохранить его в корне вашего PHP-приложения)

enter image description here

Затем, в вашей папке приложения php, переименуйте файл "thing -thing.json "в" client_credentials.json "

Почти там ...

Затем откройте" client_credentials.json "«с текстовым редактором
- скопируйте адрес электронной почты, который является значением« client_email », что-то вроде« test-php-app@xxxxxxxxxx-nnnnnnnnnnnnnnnnnnnn.iam.gserviceaccount.com »

Далее перейдите кВаш календарь (ваш Календарь Google, который вы хотите открыть) и перейдите в «Настройки»> «Настройки календаря»
- прокрутите вниз до «Поделиться с определенными людьми» (вы увидите себя в списке)
- нажмите «+ Добавить людей» и вставьте адрес электронной почты, такой как «test-php-app@xxxxxxxxxx-nnnnnnnnnnnnn.iam.gserviceaccount.com»
- выберите, что вы хотите для «Разрешения»
- нажмите кнопку «Отправить»

Теперь ваше php-приложение через учетную запись службы имеет доступ к вашему календарю.

Вот код для отображения идентификатора календаря:

    echo "calendar summary: " . $calendarListEntry->getSummary();
    echo "\ncalendar id: " . $calendarListEntry->getId();
    echo "\n------------------------------\n\n";

...