Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment créer une réunion sur Zoom en utilisant Zoom API et PHP

619

Récemment, je travaillais sur un projet où j’avais besoin d’interagir avec l’API Zoom. Dans l’application du client, nous avons implémenté beaucoup de choses en utilisant l’API Zoom comme les comptes, la facturation, les réunions, les groupes, les rapports, les salles, etc. Bien que nous ayons fait beaucoup de choses en utilisant l’API Zoom, dans ce didacticiel, je vais me concentrer sur créer une réunion en utilisant Zoom API et PHP.

Comme nous le savons tous, Zoom est une plate-forme utilisée pour la téléconférence, le télétravail, l’enseignement à distance, etc. Elle est populaire parmi les personnes pour les conférences en ligne, les réunions, les webinaires et autres.

Ceux qui cherchent à créer une réunion via l’API Zoom doivent choisir OAuth ou JWT pour interagir avec leurs API. OAuth et JWT (jeton Web JSON) offrent un niveau de sécurité élevé pour effectuer des interactions avec les services tiers. Dans ce didacticiel, nous utiliserons le processus OAuth et communiquerons avec l’API Zoom via celui-ci.

Vous pouvez également consulter le tutoriel Intégration de Zoom avec JWT en PHP.

Créer une application OAuth sur Zoom

Une fois que vous avez votre compte Zoom, vous devez créer une application OAuth sur Zoom en suivant les étapes ci-dessous.

  • Enregistrez votre application sur Zoom APP Marketplace.
  • Lors de l’enregistrement d’une application, vous obtiendrez vos informations d’identification générées. Ici, vous devez transmettre l’URL de redirection pour OAuth et l’URL de la liste blanche.
  • À l’étape suivante, saisissez les informations de base sur votre application.
  • Dans l’onglet, vous pouvez éventuellement activer certaines fonctionnalités supplémentaires telles que les abonnements aux événements et les abonnements aux discussions pour votre application.
  • Sous l’onglet "Portées", vous devez ajouter des portées concernant votre application. Par exemple, vous pouvez ajouter une portée pour les réunions Zoom.

Si vous êtes sur localhost, utilisez le ngrok et générez l’URL locale. Dans mon cas, les URL ngrok pour la redirection OAuth et l’URL de la liste blanche sont indiquées ci-dessous.

Si vous rencontrez un problème avec la création d’une application OAuth, veuillez vous référer à la documentation officielle de Zoom sur Créer une application OAuth.

Installation et configuration de base

Je n’ai trouvé aucune bibliothèque PHP pouvant être utilisée pour interagir avec l’API Zoom. En faisant quelques recherches, je suis capable de le gérer via la bibliothèque Guzzle et l’API REST Zoom. Installez la bibliothèque Guzzle à l’aide de la commande :

composer require guzzlehttp/guzzle

Pour interagir avec Zoom REST API, il faut envoyer un jeton d’accès. Nous allons le générer et le stocker dans la base de données. Le jeton d’accès est valide pendant une courte période. Dans notre code, nous allons régénérer le jeton d’accès en arrière-plan afin que l’utilisateur n’ait pas besoin de refaire le processus d’autorisation.

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

Comme nous aurons besoin de récupérer les valeurs des jetons dans la base de données, nous devons écrire un code pour cela. Créez un fichier class-db.phpet ajoutez-y le code ci-dessous.

classe-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)");
        }
    }
}

Assurez-vous de remplacer les espaces réservés par vos informations d’identification de base de données réelles. Ensuite, générons un jeton d’accès via le processus OAuth.

Générer un jeton d’accès

L’utilisateur peut créer un jeton d’accès pour son compte à l’aide des informations d’identification de l’application et du processus OAuth. Créez un config.phpfichier, stockez les informations d’identification de l’application et redirigez l’URL dans ce fichier PHP. Incluez également les autres environnements tels que la classe DB et la bibliothèque de fournisseurs comme suit.

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');

Remplacez les espaces réservés par les informations d’identification de votre application et définissez la même URL de redirection que vous avez ajoutée dans l’application Zoom OAuth. Dans mon cas, l’URL de redirection est https://f2448150.ngrok.io/zoom/callback.php. Cela signifie que dans le callback.phpfichier, nous devons écrire le code qui appelle une API Zoom, demander un jeton d’accès et le stocker dans la base de données.

rappel.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();
}

Maintenant, générons une URL autorisée sur laquelle un utilisateur peut cliquer et terminer le processus d’autorisation. Je vais créer cette URL dans le index.phpfichier.

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>

Exécutez le fichier ci-dessus sur le navigateur, cliquez sur le lien « Connexion avec Zoom » et terminez le processus d’autorisation. En cas d’authentification réussie, vous devriez voir un message de réussite et le jeton d’accès serait stocké dans votre tokentable. Si cela fonctionne, nous pouvons aller de l’avant et créer une réunion avec l’API Zoom.

Créer une réunion sur Zoom à l’aide de l’API Zoom

Zoom fournit un point de terminaison pour créer une réunion via leur API REST. Vous pouvez lire à ce sujet sur leur documentation. Cela nécessite l’envoi d’une requête POST au point de terminaison donné avec les paramètres requis.

Le point de terminaison de l’API nécessite également qu’un jeton d’accès soit transmis dans l’en-tête d’autorisation. Comme je l’ai dit plus tôt, le jeton d’accès a une courte durée de vie et nous allons le régénérer en arrière-plan sans demander à nouveau le processus d’authentification.

J’ai créé un create-meeting.phpfichier pour envoyer une requête POST au point de terminaison. J’ai également géré la condition d’expiration du jeton et sa régénération en cas d’expiration.

créer-réunion.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();

Si vous avez remarqué le code, j’ai transmis "2021-03-20T20:30:00" comme ‘start_time’. Cela signifie que l’heure de la réunion sera le 20 mars 2021, 20:30. L’utilisateur doit transmettre le format pour cela dans aaaa-MM-jjTHH:mm:ss. Pour la clé "type", j’ai passé la valeur "2" qui correspond à une réunion planifiée. L’utilisateur doit également définir un mot de passe de réunion que j’ai défini sur "123456".

Allez-y et exécutez ce code et vous devriez voir qu’une réunion est créée sur votre compte Zoom.

Répertorier les réunions Zoom

Nous avons écrit un code pour créer des réunions Zoom. En utilisant ce code, vous pouvez créer autant de réunions que vous le souhaitez. Après cela, vous souhaiterez peut-être répertorier toutes les réunions dans votre application.

Zoom fournit une API à travers laquelle nous pouvons récupérer toutes nos réunions Zoom. Créez un fichier list-meeting.phpet utilisez le code ci-dessous qui imprimera toutes les réunions.

liste-rencontre.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";
    }
}

Dans le code ci-dessus, j’imprime un sujet et l’URL des réunions. Vous pouvez également imprimer d’autres informations. Imprimez la variable $datapour obtenir une liste des informations disponibles.

Obtenir les anciens participants à la réunion

Une fois la réunion terminée, vous pouvez obtenir une liste des participants à l’aide de l’API Zoom. Il est recommandé d’appeler cette API uniquement si vous êtes sur un compte payant. Cette API spécifique nécessite d’avoir un compte payant. Si vous essayez d’appeler cette API avec un compte gratuit, vous obtiendrez une erreur.

<?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";
    }
}

Remplacez l’espace réservé MEETING_ID par l’identifiant réel de la réunion passée. Dans la réponse, vous obtiendrez les noms et e-mails des participants.

Supprimer une réunion

L’utilisateur peut jouer avec les points de terminaison de l’API Zoom comme la liste, la mise à jour, la suppression d’une réunion. Tout ce que vous avez à faire est de suivre leurs directives sur l’utilisation de points de terminaison spécifiques. Par exemple, vous pouvez supprimer une réunion en envoyant une demande DELETE au point de terminaison de l’API. À ce point de terminaison, vous devez transmettre votre identifiant de réunion comme indiqué ci-dessous.

<?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.";
}

J’espère que vous avez appris à créer une réunion en utilisant Zoom API et PHP. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails