WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как создать встречу в Zoom с помощью Zoom API и PHP

2 326

Недавно я работал над проектом, в котором мне нужно было взаимодействовать с API Zoom. В клиентском приложении мы реализовали множество вещей с помощью Zoom API, таких как Accounts, Billing, Meetings, Groups, Reports, Rooms и т.д. Хотя мы много чего сделали с помощью Zoom API, в этом руководстве я сосредоточусь на том, как создать встречу с помощью Zoom API и PHP.

Как мы все знаем, Zoom – это платформа, которая используется для телеконференций, работы на дому, дистанционного обучения и т.д. Она популярна среди людей для проведения онлайн-конференций, встреч, вебинаров и прочего.

Тем, кто хочет создать встречу через Zoom API, необходимо выбрать OAuth или JWT для взаимодействия со своими API. OAuth и JWT (веб-токен JSON) обеспечивают высокий уровень безопасности для взаимодействия со сторонними службами. В этом руководстве мы будем использовать процесс OAuth и общаться с API Zoom через него.

Вы также можете проверить учебник по интеграции Zoom с JWT в PHP.

Создайте приложение OAuth в Zoom

Если у вас есть учетная запись Zoom, вам необходимо создать приложение OAuth в Zoom, выполнив следующие действия.

  • Зарегистрируйте свое приложение на Zoom APP Marketplace.
  • После регистрации приложения вы получите сгенерированные учетные данные. Здесь вам нужно передать URL-адрес перенаправления для OAuth и URL-адрес белого списка.
  • На следующем шаге введите основную информацию о своем приложении.
  • На вкладке вы можете дополнительно включить некоторые дополнительные функции, такие как подписки на события и подписки на чат для вашего приложения.
  • На вкладке «Области» вам необходимо добавить области для вашего приложения. Например, вы можете добавить область для собраний Zoom.

Если вы находитесь на localhost, используйте ngrok и сгенерируйте локальный URL. В моем случае URL-адреса ngrok для перенаправления OAuth и URL-адреса белого списка показаны ниже.

Если вы столкнулись с какой-либо проблемой при создании приложения OAuth, обратитесь к официальной документации Zoom по созданию приложения OAuth.

Базовая установка и конфигурация

Я не нашел PHP-библиотеки, которую можно было бы использовать для взаимодействия с Zoom API. Проведя небольшое исследование, я могу управлять им через библиотеку Guzzle и Zoom REST API. Установите библиотеку Guzzle с помощью команды:

composer require guzzlehttp/guzzle

Для взаимодействия с Zoom REST API требуется отправить токен доступа. Мы собираемся сгенерировать его и сохранить в базе данных. Токен доступа действителен в течение короткого периода времени. В нашем коде мы повторно сгенерируем токен доступа в фоновом режиме, чтобы пользователю не приходилось снова выполнять процесс авторизации.

CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `access_token` text NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Поскольку нам потребуется получить значения токенов из базы данных, нам нужно написать для этого код. Создайте файл class-db.phpи добавьте в него приведенный ниже код.

класс-db.php

<?php
class DB {
    private $dbHost     = "DB_HOST";
    private $dbUsername = "DB_USERNAME";
    private $dbPassword = "DB_PASSWORD";
    private $dbName     = "DB_NAME";
  
    public function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: ". $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
  
    public function is_table_empty() {
        $result = $this->db->query("SELECT id FROM token");
        if($result->num_rows) {
            return false;
        }
  
        return true;
    }
  
    public function get_access_token() {
        $sql = $this->db->query("SELECT access_token FROM token");
        $result = $sql->fetch_assoc();
        return json_decode($result['access_token']);
    }
  
    public function get_refersh_token() {
        $result = $this->get_access_token();
        return $result->refresh_token;
    }
  
    public function update_access_token($token) {
        if($this->is_table_empty()) {
            $this->db->query("INSERT INTO token(access_token) VALUES('$token')");
        } else {
            $this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
        }
    }
}

Обязательно замените заполнители фактическими учетными данными вашей базы данных. Затем давайте сгенерируем токен доступа через процесс OAuth.

Создать токен доступа

Пользователь может создать токен доступа для своей учетной записи, используя учетные данные приложения и процесс OAuth. Создайте config.phpфайл, сохраните учетные данные приложения и URL-адрес перенаправления в этом файле PHP. Включите также другие среды, такие как класс БД и библиотека поставщика, следующим образом.

config.php

<?php
require_once 'vendor/autoload.php';
require_once "class-db.php";
  
define('CLIENT_ID', 'YOUR_CLIENT_ID');
define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
define('REDIRECT_URI', 'REDIRECT_URL_FOR_OAUTH');

Замените заполнители учетными данными вашего приложения и установите тот же URL-адрес перенаправления, который вы добавили в приложение Zoom OAuth. В моем случае URL-адрес перенаправления https://f2448150.ngrok.io/zoom/callback.php. Это означает, что в callback.phpфайле мы должны написать код, который вызывает API Zoom, запрашивает токен доступа и сохраняет его в базе данных.

callback.php

<?php
require_once 'config.php';
  
try {
    $client = new GuzzleHttpClient(['base_uri' => 'https://zoom.us']);
  
    $response = $client->request('POST', '/oauth/token', [
        "headers" => [
            "Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
        ],
        'form_params' => [
            "grant_type" => "authorization_code",
            "code" => $_GET['code'],
            "redirect_uri" => REDIRECT_URI
        ],
    ]);
  
    $token = json_decode($response->getBody()->getContents(), true);
  
    $db = new DB();
  
    if($db->is_table_empty()) {
        $db->update_access_token(json_encode($token));
        echo "Access token inserted successfully.";
    }
} catch(Exception $e) {
    echo $e->getMessage();
}

Теперь давайте сгенерируем авторизованный URL-адрес, по которому пользователь может щелкнуть и завершить процесс авторизации. Я собираюсь создать этот URL-адрес в index.phpфайле.

index.php

<?php
require_once 'config.php';
  
$url = "https://zoom.us/oauth/authorize?response_type=code&client_id=".CLIENT_ID."&redirect_uri=".REDIRECT_URI;
?>
  
<a href="<?php echo $url; ?>">Login with Zoom</a>

Запустите указанный выше файл в браузере, щелкните ссылку «Войти с помощью Zoom» и завершите процесс авторизации. При успешной аутентификации вы должны увидеть сообщение об успешном завершении, и токен доступа будет сохранен в вашей tokenтаблице. Если это сработает, мы можем продолжить и создать встречу с помощью API Zoom.

Создать встречу в Zoom с помощью Zoom API

Zoom предоставляет конечную точку для создания встречи через их REST API. Вы можете прочитать об этом в их документации. Для этого требуется отправить запрос POST в заданную конечную точку вместе с необходимыми параметрами.

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

Я создал create-meeting.phpфайл для отправки запроса POST в конечную точку. Я также обработал условие истечения срока действия токена и регенерировал его, если срок действия истек.

create-meeting.php

<?php
require_once 'config.php';
  
function create_meeting() {
    $client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
  
    $db = new DB();
    $arr_token = $db->get_access_token();
    $accessToken = $arr_token->access_token;
  
    try {
        $response = $client->request('POST', '/v2/users/me/meetings', [
            "headers" => [
                "Authorization" => "Bearer $accessToken"
            ],
            'json' => [
                "topic" => "Let's learn Laravel",
                "type" => 2,
                "start_time" => "2021-03-05T20:30:00",
                "duration" => "30", // 30 mins
                "password" => "123456"
            ],
        ]);
  
        $data = json_decode($response->getBody());
        echo "Join URL: ". $data->join_url;
        echo "<br>";
        echo "Meeting Password: ". $data->password;
  
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
  
            $client = new GuzzleHttpClient(['base_uri' => 'https://zoom.us']);
            $response = $client->request('POST', '/oauth/token', [
                "headers" => [
                    "Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
                ],
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token
                ],
            ]);
            $db->update_access_token($response->getBody());
  
            create_meeting();
        } else {
            echo $e->getMessage();
        }
    }
}
  
create_meeting();

Если вы заметили код, я передал «2021-03-20T20: 30: 00» в качестве «start_time». Это означает, что время встречи будет 20 марта 2021 года, 20:30 PM. Пользователь должен передать его формат. в формате yyyy-MM-ddTHH: mm: ss. Для ключа «type» я передал значение «2», которое предназначено для запланированной встречи. Пользователь также должен установить пароль встречи, который я установил на «123456».

Продолжайте и запустите этот код, и вы увидите, что в вашей учетной записи Zoom создана встреча.

Список встреч Zoom

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

Zoom предоставляет API, через который мы можем получать все наши собрания Zoom. Создайте файл list-meeting.phpи используйте приведенный ниже код, который распечатает все собрания.

list-meeting.php

<?php
require_once 'config.php';
  
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
  
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
  
$response = $client->request('GET', '/v2/users/me/meetings', [
    "headers" => [
        "Authorization" => "Bearer $accessToken"
    ]
]);
 
$data = json_decode($response->getBody());
 
if (!empty($data)) {
    foreach ($data->meetings as $d) {
        $topic = $d->topic;
        $join_url = $d->join_url;
        echo "<h3>Topic: $topic</h3>";
        echo "Join URL: $join_url";
    }
}

В приведенном выше коде я печатаю тему и URL-адрес собраний. Вы также можете распечатать другую информацию. Распечатайте переменную, $dataчтобы получить список доступной информации.

Получить прошлых участников собрания

По окончании встречи вы можете получить список участников с помощью API Zoom. Рекомендуется вызывать этот API только в том случае, если у вас есть платный аккаунт. Этот конкретный API требует наличия платной учетной записи. Если вы попытаетесь вызвать этот API с помощью бесплатной учетной записи, вы получите сообщение об ошибке.

<?php
require_once 'config.php';
   
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
   
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
   
$response = $client->request('GET', '/v2/past_meetings/MEETING_ID/participants', [
    "headers" => [
        "Authorization" => "Bearer $accessToken"
    ]
]);
  
$data = json_decode($response->getBody());
if (!empty($data)) {
    foreach ($data->participants as $p) {
        $name = $p->name;
        $email = $p->user_email;
        echo "Name: $name";
        echo "Email: $email";
    }
}

Замените заполнитель MEETING_ID фактическим идентификатором прошедшей встречи. В ответ вы получите имена и адреса электронной почты участников.

Удалить встречу

Пользователь может играть с конечными точками API Zoom, такими как список, обновление, удаление собрания. Все, что вам нужно сделать, это следовать их рекомендациям по использованию определенных конечных точек. Например, вы можете удалить собрание, отправив запрос DELETE в конечную точку API. Этой конечной точке вам необходимо передать свой идентификатор встречи, как показано ниже.

<?php
require_once 'config.php';
  
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
  
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
  
$response = $client->request('DELETE', '/v2/meetings/{meeting_id}', [
    "headers" => [
        "Authorization" => "Bearer $accessToken"
    ]
]);
 
if (204 == $response->getStatusCode()) {
    echo "Meeting is deleted.";
}

Надеюсь, вы узнали, как создать встречу с помощью Zoom API и PHP. Я хотел бы услышать ваши мысли и предложения в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее