{"id":26099,"date":"2021-06-19T16:57:00","date_gmt":"2021-06-19T13:57:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26099"},"modified":"2021-10-18T02:03:06","modified_gmt":"2021-10-17T23:03:06","slug":"comment-creer-des-reunions-zoom-avec-php-et-jwt","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/comment-creer-des-reunions-zoom-avec-php-et-jwt\/","title":{"rendered":"Comment cr\u00e9er des r\u00e9unions Zoom avec PHP et JWT"},"content":{"rendered":"<p>Dans le pass\u00e9, j&rsquo;ai \u00e9crit un article qui explique la <a href=\"https:\/\/themewp.inform.click\/fr\/comment-creer-une-reunion-sur-zoom-en-utilisant-zoom-api-et-php\/\" title=\"cr\u00e9ation d'une r\u00e9union Zoom avec PHP et OAuth\" >cr\u00e9ation d&rsquo;une r\u00e9union Zoom avec PHP et OAuth<\/a>. L&rsquo;un de nos lecteurs a pos\u00e9 des questions sur la cr\u00e9ation d&rsquo;une r\u00e9union Zoom \u00e0 l&rsquo;aide de JWT (JSON Web Tokens) et PHP. <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/auth\/jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">L&rsquo;<\/a> API <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/auth\/jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom<\/a> nous permet d&rsquo;utiliser \u00e0 la fois OAuth ou JWT pour g\u00e9rer leurs API. L&rsquo;API Zoom n\u00e9cessite le jeton du porteur g\u00e9n\u00e9r\u00e9 via OAuth ou JWT.<\/p>\n<p><strong>Remarque<\/strong>: JWT ne peut \u00eatre utilis\u00e9 que pour les applications et processus internes. Toutes les applications cr\u00e9\u00e9es pour un usage tiers doivent utiliser le type d&rsquo;application OAuth.<\/p>\n<p>Lorsque vous souhaitez cr\u00e9er une application Zoom \u00e0 usage interne, l&rsquo;approche JWT est plus simple que OAuth.<\/p>\n<h3>Commencer<\/h3>\n<p>Pour commencer, acc\u00e9dez au tableau de bord du d\u00e9veloppeur Zoom et cr\u00e9ez une <a href=\"https:\/\/marketplace.zoom.us\/develop\/create\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nouvelle application<\/a>. Choisissez <code>JWT<\/code>comme type d&rsquo;application et copiez la cl\u00e9 et le secret de l&rsquo;API Zoom.<\/p>\n<p>Un seul JWT se compose de trois composants\u00a0: en-t\u00eate, charge utile et signature avec une <code>.<\/code>s\u00e9paration chacun. Par example:<code>aaaaa.bbbbb.ccccc<\/code><\/p>\n<p>Plusieurs biblioth\u00e8ques sont disponibles pour aider \u00e0 g\u00e9n\u00e9rer JWT. Je recommanderai d&rsquo;utiliser la <a href=\"https:\/\/github.com\/firebase\/php-jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">biblioth\u00e8que firebase\/php-jwt<\/a>. Cette biblioth\u00e8que fournit une approche beaucoup plus simple pour cr\u00e9er JWT. Installez cette biblioth\u00e8que \u00e0 l&rsquo;aide de la commande ci-dessous.<\/p>\n<pre><code>composer require firebase\/php-jwt<\/code><\/pre>\n<p>Ensuite, nous devons envoyer une requ\u00eate POST \u00e0 \u200b\u200bl&rsquo;API Zoom pour cr\u00e9er une r\u00e9union. On peut utiliser cURL \u00e0 cette fin. Mais, personnellement, j&rsquo;aime un <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> qui fournit un code beaucoup plus propre que cURL. Un autre avantage de l&rsquo;utilisation de Guzzle est que vous n&rsquo;avez pas besoin d&rsquo;avoir l&rsquo;extension cURL activ\u00e9e sur le serveur.<\/p>\n<p>Ex\u00e9cutez la commande ci-dessous pour installer la biblioth\u00e8que Guzzle.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<h3>Cr\u00e9ez des r\u00e9unions Zoom avec JWT et PHP<\/h3>\n<p>Nous avons install\u00e9 deux packages pour atteindre notre objectif. Maintenant, nous devons inclure son environnement dans notre fichier PHP. De plus, nous avons copi\u00e9 les cl\u00e9s de l&rsquo;API Zoom dans les \u00e9tapes pr\u00e9c\u00e9dentes. D\u00e9finissons ces cl\u00e9s comme des constantes en PHP.<\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nuse FirebaseJWTJWT;\nuse GuzzleHttpClient;\n\u00a0\ndefine('ZOOM_API_KEY', 'API_KEY_HERE');\ndefine('ZOOM_SECRET_KEY', 'API_SECRET_HERE');<\/code><\/pre>\n<p>Ensuite, pour g\u00e9n\u00e9rer JWT \u00e0 l&rsquo;aide du <code>firebase\/php-jwt<\/code>package, notre code sera le suivant.<\/p>\n<pre><code>function getZoomAccessToken() {\n\u00a0\u00a0\u00a0\u00a0$key = ZOOM_SECRET_KEY;\n\u00a0\u00a0\u00a0\u00a0$payload = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"iss\" =&gt; ZOOM_API_KEY,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'exp' =&gt; time() + 3600,\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0return JWT::encode($payload, $key);\u00a0\u00a0\u00a0 \n}<\/code><\/pre>\n<p>Enfin, pour cr\u00e9er une r\u00e9union Zoom, il doit envoyer une demande POST au point <code>\/v2\/users\/me\/meetings<\/code>de terminaison avec JWT comme <strong>jeton de porteur<\/strong>.<\/p>\n<pre><code>function createZoomMeeting() {\n\u00a0\u00a0\u00a0\u00a0$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/api.zoom.us',\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/v2\/users\/me\/meetings', [\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; \"Bearer \". getZoomAccessToken()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"topic\" =&gt; \"Let's Learn WordPress\",\n\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\"start_time\" =&gt; \"2021-01-30T20:30:00\",\n\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\"password\" =&gt; \"123456\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$data = json_decode($response-&gt;getBody());\n\u00a0\u00a0\u00a0\u00a0echo \"Join URL: \". $data-&gt;join_url;\n\u00a0\u00a0\u00a0\u00a0echo \"&lt;br&gt;\";\n\u00a0\u00a0\u00a0\u00a0echo \"Meeting Password: \". $data-&gt;password;\n}\n\u00a0\ncreateZoomMeeting();<\/code><\/pre>\n<h3>R\u00e9pertorier les r\u00e9unions Zoom<\/h3>\n<p>Dans votre application, vous souhaiterez peut-\u00eatre r\u00e9pertorier toutes les r\u00e9unions Zoom. Zoom fournit une API gr\u00e2ce \u00e0 laquelle nous pouvons obtenir une liste de toutes les r\u00e9unions Zoom. En utilisant le code ci-dessous, vous pouvez imprimer les d\u00e9tails de vos r\u00e9unions Zoom.<\/p>\n<pre><code>$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/api.zoom.us']);\n\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 \". getZoomAccessToken()\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>Ici, 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>Pour les r\u00e9unions pass\u00e9es, vous pouvez obtenir une liste des participants \u00e0 l&rsquo;aide de l&rsquo;API Zoom. Si vous \u00eates sur un compte payant, vous pouvez utiliser cette API sp\u00e9cifique. Cette API 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>$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/api.zoom.us']);\n\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 \". getZoomAccessToken()\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 Zoom Meeting avec JWT et PHP<\/h3>\n<p>En ajoutant pour cr\u00e9er une r\u00e9union, Zoom fournit \u00e9galement des points de terminaison d&rsquo;API tels que la liste, la mise \u00e0 jour, la suppression d&rsquo;une r\u00e9union. L&rsquo;utilisateur doit suivre la documentation de son API pour utiliser un point de terminaison sp\u00e9cifique. Par exemple, vous pouvez <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingdelete\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">supprimer une r\u00e9union<\/a> en envoyant une demande DELETE au point de terminaison de l&rsquo;API Zoom. Vous devez transmettre votre identifiant de r\u00e9union au point de terminaison comme suit.<\/p>\n<pre><code>function deleteZoomMeeting($meeting_id) {\n\u00a0\u00a0\u00a0\u00a0$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/api.zoom.us',\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request(\"DELETE\", \"\/v2\/meetings\/$meeting_id\", [\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; \"Bearer \". getZoomAccessToken()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (204 == $response-&gt;getStatusCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Meeting deleted.\";\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\ndeleteZoomMeeting('MEETING_ID_HERE');<\/code><\/pre>\n<p>J&rsquo;esp\u00e8re que vous avez appris \u00e0 cr\u00e9er des r\u00e9unions Zoom avec PHP et JWT. S&rsquo;il vous pla\u00eet partager vos pens\u00e9es et suggestions dans la section commentaires ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/un-guide-sur-l-integration-de-hcaptcha-avec-php\/\" title=\"Un guide sur l&#039;int\u00e9gration de hCaptcha avec PHP\">Un guide sur l&rsquo;int\u00e9gration de hCaptcha avec PHP<\/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<li><a href=\"https:\/\/themewp.inform.click\/fr\/speech-to-text-a-l-aide-d-amazon-transcribe-en-php\/\" title=\"Speech-To-Text \u00e0 l&#039;aide d&#039;Amazon Transcribe en PHP\">Speech-To-Text \u00e0 l&rsquo;aide d&rsquo;Amazon Transcribe en 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 souhaitez cr\u00e9er des r\u00e9unions zoom avec JWT et PHP ? JWT (JSON Web Tokens) est une alternative \u00e0 OAuth pour g\u00e9n\u00e9rer le jeton d&rsquo;acc\u00e8s. Dans ce<\/p>\n","protected":false},"author":1,"featured_media":20149,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[273],"tags":[844],"class_list":["post-26099","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\/26099","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=26099"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/26099\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/20149"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=26099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=26099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=26099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}