{"id":26092,"date":"2021-06-19T18:21:00","date_gmt":"2021-06-19T15:21:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26092"},"modified":"2021-10-18T02:02:57","modified_gmt":"2021-10-17T23:02:57","slug":"comment-creer-une-reunion-sur-zoom-en-utilisant-zoom-api-et-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/comment-creer-une-reunion-sur-zoom-en-utilisant-zoom-api-et-php\/","title":{"rendered":"Comment cr\u00e9er une r\u00e9union sur Zoom en utilisant Zoom API et PHP"},"content":{"rendered":"<p>R\u00e9cemment, je travaillais sur un projet o\u00f9 j&rsquo;avais besoin d&rsquo;interagir avec l&rsquo;API Zoom. Dans l&rsquo;application du client, nous avons impl\u00e9ment\u00e9 beaucoup de choses en utilisant l&rsquo;API Zoom comme les comptes, la facturation, les r\u00e9unions, les groupes, les rapports, les salles, etc. Bien que nous ayons fait beaucoup de choses en utilisant l&rsquo;API Zoom, dans ce didacticiel, je vais me concentrer sur cr\u00e9er une r\u00e9union en utilisant Zoom API et PHP.<\/p>\n<p>Comme nous le savons tous, <a href=\"https:\/\/zoom.us\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom<\/a> est une plate-forme utilis\u00e9e pour la t\u00e9l\u00e9conf\u00e9rence, le t\u00e9l\u00e9travail, l&rsquo;enseignement \u00e0 distance, etc. Elle est populaire parmi les personnes pour les conf\u00e9rences en ligne, les r\u00e9unions, les webinaires et autres.<\/p>\n<p>Ceux qui cherchent \u00e0 cr\u00e9er une r\u00e9union via l&rsquo;API Zoom doivent choisir OAuth ou JWT pour interagir avec leurs API. OAuth et JWT (jeton Web JSON) offrent un niveau de s\u00e9curit\u00e9 \u00e9lev\u00e9 pour effectuer des interactions avec les services tiers. Dans ce didacticiel, nous utiliserons le processus OAuth et communiquerons avec l&rsquo;API Zoom via celui-ci.<\/p>\n<p>Vous pouvez \u00e9galement consulter le tutoriel <a href=\"https:\/\/themewp.inform.click\/fr\/comment-creer-des-reunions-zoom-avec-php-et-jwt\/\" title=\"Int\u00e9gration de Zoom avec JWT en PHP\">Int\u00e9gration de Zoom avec JWT en PHP<\/a>.<\/p>\n<h3>Cr\u00e9er une application OAuth sur Zoom<\/h3>\n<p>Une fois que vous avez votre compte Zoom, vous devez cr\u00e9er une application OAuth sur Zoom en suivant les \u00e9tapes ci-dessous.<\/p>\n<ul>\n<li><a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/build\/oauth-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Enregistrez votre application<\/a> sur Zoom APP Marketplace.<\/li>\n<li>Lors de l&rsquo;enregistrement d&rsquo;une application, vous obtiendrez vos informations d&rsquo;identification g\u00e9n\u00e9r\u00e9es. Ici, vous devez transmettre l&rsquo;URL de redirection pour OAuth et l&rsquo;URL de la liste blanche.<\/li>\n<li>\u00c0 l&rsquo;\u00e9tape suivante, saisissez les informations de base sur votre application.<\/li>\n<li>Dans l&rsquo;onglet, vous pouvez \u00e9ventuellement activer certaines fonctionnalit\u00e9s suppl\u00e9mentaires telles que les abonnements aux \u00e9v\u00e9nements et les abonnements aux discussions pour votre application.<\/li>\n<li>Sous l&rsquo;onglet &quot;Port\u00e9es&quot;, vous devez ajouter des port\u00e9es concernant votre application. Par exemple, vous pouvez ajouter une port\u00e9e pour les r\u00e9unions Zoom.<\/li>\n<\/ul>\n<p>Si vous \u00eates sur localhost, utilisez le <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ngrok<\/a> et g\u00e9n\u00e9rez l&rsquo;URL locale. Dans mon cas, les URL ngrok pour la redirection OAuth et l&rsquo;URL de la liste blanche sont indiqu\u00e9es ci-dessous.<\/p>\n<p>Si vous rencontrez un probl\u00e8me avec la cr\u00e9ation d&rsquo;une application OAuth, veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation officielle de Zoom sur <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/build\/oauth-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Cr\u00e9er une application OAuth<\/a>.<\/p>\n<h3>Installation et configuration de base<\/h3>\n<p>Je n&rsquo;ai trouv\u00e9 aucune biblioth\u00e8que PHP pouvant \u00eatre utilis\u00e9e pour interagir avec l&rsquo;API Zoom. En faisant quelques recherches, je suis capable de le g\u00e9rer via la biblioth\u00e8que Guzzle et l&rsquo;API REST Zoom. Installez la biblioth\u00e8que Guzzle \u00e0 l&rsquo;aide de la commande\u00a0:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Pour interagir avec Zoom REST API, il faut envoyer un jeton d&rsquo;acc\u00e8s. Nous allons le g\u00e9n\u00e9rer et le stocker dans la base de donn\u00e9es. Le jeton d&rsquo;acc\u00e8s est valide pendant une courte p\u00e9riode. Dans notre code, nous allons r\u00e9g\u00e9n\u00e9rer le jeton d&rsquo;acc\u00e8s en arri\u00e8re-plan afin que l&rsquo;utilisateur n&rsquo;ait pas besoin de refaire le processus d&rsquo;autorisation.<\/p>\n<pre><code>CREATE TABLE `token` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`access_token` text NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<\/code><\/pre>\n<p>Comme nous aurons besoin de r\u00e9cup\u00e9rer les valeurs des jetons dans la base de donn\u00e9es, nous devons \u00e9crire un code pour cela. Cr\u00e9ez un fichier <code>class-db.php<\/code>et ajoutez-y le code ci-dessous.<\/p>\n<p><strong>classe-db.php<\/strong><\/p>\n<pre><code>&lt;?php\nclass DB {\n\u00a0\u00a0\u00a0\u00a0private $dbHost\u00a0\u00a0\u00a0\u00a0 = \"DB_HOST\";\n\u00a0\u00a0\u00a0\u00a0private $dbUsername = \"DB_USERNAME\";\n\u00a0\u00a0\u00a0\u00a0private $dbPassword = \"DB_PASSWORD\";\n\u00a0\u00a0\u00a0\u00a0private $dbName\u00a0\u00a0\u00a0\u00a0 = \"DB_NAME\";\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!isset($this-&gt;db)){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Connect to the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$conn = new mysqli($this-&gt;dbHost, $this-&gt;dbUsername, $this-&gt;dbPassword, $this-&gt;dbName);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($conn-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die(\"Failed to connect with MySQL: \". $conn-&gt;connect_error);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}else{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db = $conn;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function is_table_empty() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;db-&gt;query(\"SELECT id FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($result-&gt;num_rows) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_access_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sql = $this-&gt;db-&gt;query(\"SELECT access_token FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $sql-&gt;fetch_assoc();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return json_decode($result['access_token']);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_refersh_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $result-&gt;refresh_token;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function update_access_token($token) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($this-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"INSERT INTO token(access_token) VALUES('$token')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Assurez-vous de remplacer les espaces r\u00e9serv\u00e9s par vos informations d&rsquo;identification de base de donn\u00e9es r\u00e9elles. Ensuite, g\u00e9n\u00e9rons un jeton d&rsquo;acc\u00e8s via le processus OAuth.<\/p>\n<h3>G\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s<\/h3>\n<p>L&rsquo;utilisateur peut cr\u00e9er un jeton d&rsquo;acc\u00e8s pour son compte \u00e0 l&rsquo;aide des informations d&rsquo;identification de l&rsquo;application et du processus OAuth. Cr\u00e9ez un <code>config.php<\/code>fichier, stockez les informations d&rsquo;identification de l&rsquo;application et redirigez l&rsquo;URL dans ce fichier PHP. Incluez \u00e9galement les autres environnements tels que la classe DB et la biblioth\u00e8que de fournisseurs comme suit.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once \"class-db.php\";\n\u00a0\u00a0\ndefine('CLIENT_ID', 'YOUR_CLIENT_ID');\ndefine('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');\ndefine('REDIRECT_URI', 'REDIRECT_URL_FOR_OAUTH');<\/code><\/pre>\n<p>Remplacez les espaces r\u00e9serv\u00e9s par les informations d&rsquo;identification de votre application et d\u00e9finissez la m\u00eame URL de redirection que vous avez ajout\u00e9e dans l&rsquo;application Zoom OAuth. Dans mon cas, l&rsquo;URL de redirection est <code>https:\/\/f2448150.ngrok.io\/zoom\/callback.php<\/code>. Cela signifie que dans le <code>callback.php<\/code>fichier, nous devons \u00e9crire le code qui appelle une API Zoom, demander un jeton d&rsquo;acc\u00e8s et le stocker dans la base de donn\u00e9es.<\/p>\n<p><strong>rappel.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/zoom.us']);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/oauth\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Basic \". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"authorization_code\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"code\" =&gt; $_GET['code'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"redirect_uri\" =&gt; REDIRECT_URI\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$token = json_decode($response-&gt;getBody()-&gt;getContents(), true);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0if($db-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($token));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Access token inserted successfully.\";\n\u00a0\u00a0\u00a0\u00a0}\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n}<\/code><\/pre>\n<p>Maintenant, g\u00e9n\u00e9rons une URL autoris\u00e9e sur laquelle un utilisateur peut cliquer et terminer le processus d&rsquo;autorisation. Je vais cr\u00e9er cette URL dans le <code>index.php<\/code>fichier.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\n$url = \"https:\/\/zoom.us\/oauth\/authorize?response_type=code&amp;client_id=\".CLIENT_ID.\"&amp;redirect_uri=\".REDIRECT_URI;\n?&gt;\n\u00a0\u00a0\n&lt;a href=\"&lt;?php echo $url; ?&gt;\"&gt;Login with Zoom&lt;\/a&gt;<\/code><\/pre>\n<p>Ex\u00e9cutez le fichier ci-dessus sur le navigateur, cliquez sur le lien \u00ab\u00a0Connexion avec Zoom\u00a0\u00bb et terminez le processus d&rsquo;autorisation. En cas d&rsquo;authentification r\u00e9ussie, vous devriez voir un message de r\u00e9ussite et le jeton d&rsquo;acc\u00e8s serait stock\u00e9 dans votre <code>token<\/code>table. Si cela fonctionne, nous pouvons aller de l&rsquo;avant et cr\u00e9er une r\u00e9union avec l&rsquo;API Zoom.<\/p>\n<h3>Cr\u00e9er une r\u00e9union sur Zoom \u00e0 l&rsquo;aide de l&rsquo;API Zoom<\/h3>\n<p>Zoom fournit un point de terminaison pour cr\u00e9er une r\u00e9union via leur API REST. Vous pouvez lire \u00e0 ce sujet sur leur <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingcreate\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentation<\/a>. Cela n\u00e9cessite l&rsquo;envoi d&rsquo;une requ\u00eate POST au point de terminaison donn\u00e9 avec les param\u00e8tres requis.<\/p>\n<p>Le point de terminaison de l&rsquo;API n\u00e9cessite \u00e9galement qu&rsquo;un jeton d&rsquo;acc\u00e8s soit transmis dans l&rsquo;en-t\u00eate d&rsquo;autorisation. Comme je l&rsquo;ai dit plus t\u00f4t, le jeton d&rsquo;acc\u00e8s a une courte dur\u00e9e de vie et nous allons le r\u00e9g\u00e9n\u00e9rer en arri\u00e8re-plan sans demander \u00e0 nouveau le processus d&rsquo;authentification.<\/p>\n<p>J&rsquo;ai cr\u00e9\u00e9 un <code>create-meeting.php<\/code>fichier pour envoyer une requ\u00eate POST au point de terminaison. J&rsquo;ai \u00e9galement g\u00e9r\u00e9 la condition d&rsquo;expiration du jeton et sa r\u00e9g\u00e9n\u00e9ration en cas d&rsquo;expiration.<\/p>\n<p><strong>cr\u00e9er-r\u00e9union.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\nfunction create_meeting() {\n\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/api.zoom.us']);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0$arr_token = $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = $arr_token-&gt;access_token;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/v2\/users\/me\/meetings', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer $accessToken\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"topic\" =&gt; \"Let's learn Laravel\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\" =&gt; 2,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"start_time\" =&gt; \"2021-03-05T20:30:00\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"duration\" =&gt; \"30\", \/\/ 30 mins\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"password\" =&gt; \"123456\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = json_decode($response-&gt;getBody());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Join URL: \". $data-&gt;join_url;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"&lt;br&gt;\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Meeting Password: \". $data-&gt;password;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/zoom.us']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/oauth\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Basic \". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token($response-&gt;getBody());\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0create_meeting();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\u00a0\ncreate_meeting();<\/code><\/pre>\n<p>Si vous avez remarqu\u00e9 le code, j&rsquo;ai transmis &quot;2021-03-20T20:30:00&quot; comme &lsquo;start_time&rsquo;. Cela signifie que l&rsquo;heure de la r\u00e9union sera le 20 mars 2021, 20:30. L&rsquo;utilisateur doit transmettre le format pour cela dans aaaa-MM-jjTHH:mm:ss. Pour la cl\u00e9 &quot;type&quot;, j&rsquo;ai pass\u00e9 la valeur &quot;2&quot; qui correspond \u00e0 une r\u00e9union planifi\u00e9e. L&rsquo;utilisateur doit \u00e9galement d\u00e9finir un mot de passe de r\u00e9union que j&rsquo;ai d\u00e9fini sur &quot;123456&quot;.<\/p>\n<p>Allez-y et ex\u00e9cutez ce code et vous devriez voir qu&rsquo;une r\u00e9union est cr\u00e9\u00e9e sur votre compte Zoom.<\/p>\n<h3>R\u00e9pertorier les r\u00e9unions Zoom<\/h3>\n<p>Nous avons \u00e9crit un code pour cr\u00e9er des r\u00e9unions Zoom. En utilisant ce code, vous pouvez cr\u00e9er autant de r\u00e9unions que vous le souhaitez. Apr\u00e8s cela, vous souhaiterez peut-\u00eatre r\u00e9pertorier toutes les r\u00e9unions dans votre application.<\/p>\n<p>Zoom fournit une API \u00e0 travers laquelle nous pouvons r\u00e9cup\u00e9rer toutes nos r\u00e9unions Zoom. Cr\u00e9ez un fichier <code>list-meeting.php<\/code>et utilisez le code ci-dessous qui imprimera toutes les r\u00e9unions.<\/p>\n<p><strong>liste-rencontre.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\n$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/api.zoom.us']);\n\u00a0\u00a0\n$db = new DB();\n$arr_token = $db-&gt;get_access_token();\n$accessToken = $arr_token-&gt;access_token;\n\u00a0\u00a0\n$response = $client-&gt;request('GET', '\/v2\/users\/me\/meetings', [\n\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer $accessToken\"\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n$data = json_decode($response-&gt;getBody());\n\u00a0\nif (!empty($data)) {\n\u00a0\u00a0\u00a0\u00a0foreach ($data-&gt;meetings as $d) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$topic = $d-&gt;topic;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$join_url = $d-&gt;join_url;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"&lt;h3&gt;Topic: $topic&lt;\/h3&gt;\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Join URL: $join_url\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Dans le code ci-dessus, j&rsquo;imprime un sujet et l&rsquo;URL des r\u00e9unions. Vous pouvez \u00e9galement imprimer d&rsquo;autres informations. Imprimez la variable <code>$data<\/code>pour obtenir une liste des informations disponibles.<\/p>\n<h3>Obtenir les anciens participants \u00e0 la r\u00e9union<\/h3>\n<p>Une fois la r\u00e9union termin\u00e9e, vous pouvez obtenir une liste des participants \u00e0 l&rsquo;aide de l&rsquo;API Zoom. Il est recommand\u00e9 d&rsquo;appeler cette API uniquement si vous \u00eates sur un compte payant. Cette API sp\u00e9cifique n\u00e9cessite d&rsquo;avoir un compte payant. Si vous essayez d&rsquo;appeler cette API avec un compte gratuit, vous obtiendrez une erreur.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\u00a0\n$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/api.zoom.us']);\n\u00a0\u00a0\u00a0\n$db = new DB();\n$arr_token = $db-&gt;get_access_token();\n$accessToken = $arr_token-&gt;access_token;\n\u00a0\u00a0\u00a0\n$response = $client-&gt;request('GET', '\/v2\/past_meetings\/MEETING_ID\/participants', [\n\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer $accessToken\"\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\u00a0\n$data = json_decode($response-&gt;getBody());\nif (!empty($data)) {\n\u00a0\u00a0\u00a0\u00a0foreach ($data-&gt;participants as $p) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$name = $p-&gt;name;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$email = $p-&gt;user_email;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Name: $name\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Email: $email\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Remplacez l&rsquo;espace r\u00e9serv\u00e9 MEETING_ID par l&rsquo;identifiant r\u00e9el de la r\u00e9union pass\u00e9e. Dans la r\u00e9ponse, vous obtiendrez les noms et e-mails des participants.<\/p>\n<h3>Supprimer une r\u00e9union<\/h3>\n<p>L&rsquo;utilisateur peut jouer avec les points de terminaison de l&rsquo;API Zoom comme la liste, la mise \u00e0 jour, la suppression d&rsquo;une r\u00e9union. Tout ce que vous avez \u00e0 faire est de suivre leurs directives sur l&rsquo;utilisation de points de terminaison sp\u00e9cifiques. Par exemple, vous pouvez supprimer une r\u00e9union en envoyant une demande DELETE au point de terminaison de l&rsquo;API. \u00c0 ce point de terminaison, vous devez transmettre votre identifiant de r\u00e9union comme indiqu\u00e9 ci-dessous.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\n$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/api.zoom.us']);\n\u00a0\u00a0\n$db = new DB();\n$arr_token = $db-&gt;get_access_token();\n$accessToken = $arr_token-&gt;access_token;\n\u00a0\u00a0\n$response = $client-&gt;request('DELETE', '\/v2\/meetings\/{meeting_id}', [\n\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer $accessToken\"\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\nif (204 == $response-&gt;getStatusCode()) {\n\u00a0\u00a0\u00a0\u00a0echo \"Meeting is deleted.\";\n}<\/code><\/pre>\n<p>J&rsquo;esp\u00e8re que vous avez appris \u00e0 cr\u00e9er une r\u00e9union en utilisant Zoom API et PHP. J&rsquo;aimerais entendre vos pens\u00e9es et suggestions dans la section des commentaires ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/comment-utiliser-l-api-youtube-pour-telecharger-une-video-sur-la-chaine-youtube\/\" title=\"Comment utiliser l&#039;API YouTube pour t\u00e9l\u00e9charger une vid\u00e9o sur la cha\u00eene YouTube\">Comment utiliser l&rsquo;API YouTube pour t\u00e9l\u00e9charger une vid\u00e9o sur la cha\u00eene YouTube<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/comment-utiliser-guzzle-un-client-http-php-pour-envoyer-des-requetes-http\/\" title=\"Comment utiliser Guzzle pour envoyer des requ\u00eates HTTP\">Comment utiliser Guzzle pour envoyer des requ\u00eates HTTP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/ecrire-des-donnees-dans-une-feuille-onedrive-a-l-aide-de-l-api-microsoft-graph-et-de-php\/\" title=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\">\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&rsquo;aide de l&rsquo;API Microsoft Graph et de PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous cherchez \u00e0 cr\u00e9er une r\u00e9union sur Zoom en utilisant Zoom API et PHP ? Dans cet article, je vais vous expliquer comment interagir avec l&rsquo;API Zoom et g\u00e9n\u00e9rer<\/p>\n","protected":false},"author":1,"featured_media":20151,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[273],"tags":[844],"class_list":["post-26092","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/26092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=26092"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/26092\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/20151"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=26092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=26092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=26092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}