{"id":26328,"date":"2021-06-19T17:00:00","date_gmt":"2021-06-19T14:00:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26328"},"modified":"2021-10-18T02:59:28","modified_gmt":"2021-10-17T23:59:28","slug":"come-creare-riunioni-zoom-con-php-e-jwt","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/it\/come-creare-riunioni-zoom-con-php-e-jwt\/","title":{"rendered":"Come creare riunioni Zoom con PHP e JWT"},"content":{"rendered":"<p>In passato ho scritto un articolo che spiega come <a href=\"https:\/\/themewp.inform.click\/it\/come-creare-una-riunione-su-zoom-utilizzando-zoom-api-e-php\/\" title=\"creare uno Zoom Meeting con PHP e OAuth\" >creare uno Zoom Meeting con PHP e OAuth<\/a>. Uno dei nostri lettori ha chiesto di creare una riunione Zoom utilizzando JWT (JSON Web Tokens) e PHP. <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/auth\/jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">L&#8217;<\/a> API <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/auth\/jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom<\/a> ci consente di utilizzare sia OAuth che JWT per gestire le loro API. L&#8217;API Zoom richiede il token Bearer generato tramite OAuth o JWT.<\/p>\n<p><strong>Nota<\/strong>: JWT pu\u00f2 essere utilizzato solo per applicazioni e processi interni. Tutte le app create per l&#8217;utilizzo da parte di terze parti devono utilizzare il tipo di app OAuth.<\/p>\n<p>Quando vuoi creare un&#8217;app Zoom per uso interno, l&#8217;approccio JWT \u00e8 pi\u00f9 semplice rispetto a OAuth.<\/p>\n<h3>Iniziare<\/h3>\n<p>Per iniziare, vai alla dashboard per sviluppatori di Zoom e crea una <a href=\"https:\/\/marketplace.zoom.us\/develop\/create\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nuova app<\/a>. Scegli <code>JWT<\/code>come tipo di app e copia la chiave e il segreto dell&#8217;API Zoom.<\/p>\n<p>Un singolo JWT \u00e8 costituito da tre componenti: Header, Payload e Signature con una <code>.<\/code>separazione ciascuno. Per esempio:<code>aaaaa.bbbbb.ccccc<\/code><\/p>\n<p>Sono disponibili diverse librerie che aiutano a generare JWT. Consiglier\u00f2 di utilizzare la <a href=\"https:\/\/github.com\/firebase\/php-jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">libreria firebase\/php-jwt<\/a>. Questa libreria fornisce un approccio molto pi\u00f9 semplice per creare JWT. Installa questa libreria usando il comando seguente.<\/p>\n<pre><code>composer require firebase\/php-jwt<\/code><\/pre>\n<p>Successivamente, dobbiamo inviare una richiesta POST all&#8217;API Zoom per creare una riunione. Si pu\u00f2 usare cURL per questo scopo. Ma personalmente mi piace un <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> che fornisce un codice molto pi\u00f9 pulito di cURL. Un altro vantaggio dell&#8217;utilizzo di Guzzle \u00e8 che non \u00e8 necessario che l&#8217;estensione cURL sia abilitata sul server.<\/p>\n<p>Esegui il comando seguente per installare la libreria Guzzle.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<h3>Crea riunioni Zoom con JWT e PHP<\/h3>\n<p>Abbiamo installato due pacchetti per raggiungere il nostro obiettivo. Ora, dobbiamo includere il suo ambiente nel nostro file PHP. Inoltre, abbiamo copiato le chiavi dell&#8217;API Zoom nei passaggi precedenti. Definiamo queste chiavi come costanti in 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>Successivamente, per generare JWT utilizzando il <code>firebase\/php-jwt<\/code>pacchetto, il nostro codice sar\u00e0 il seguente.<\/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>Infine, per creare una riunione Zoom \u00e8 necessario inviare una richiesta POST all&#8217;endpoint <code>\/v2\/users\/me\/meetings<\/code>con JWT come <strong>Bearer Token<\/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>Elenco riunioni Zoom<\/h3>\n<p>Nella tua applicazione, potresti voler elencare tutte le riunioni Zoom. Zoom fornisce un&#8217;API attraverso la quale possiamo ottenere un elenco di tutte le riunioni Zoom. Usando il codice qui sotto, puoi stampare i dettagli delle tue riunioni 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>Qui, sto stampando un argomento e l&#8217;URL delle riunioni. Puoi anche stampare altre informazioni. Stampa la variabile <code>$data<\/code>per ottenere un elenco di informazioni disponibili.<\/p>\n<h3>Ottieni partecipanti alle riunioni precedenti<\/h3>\n<p>Per le riunioni passate, puoi ottenere un elenco dei partecipanti utilizzando l&#8217;API Zoom. Se hai un account a pagamento, puoi utilizzare questa API specifica. Questa API richiede un account a pagamento. Se provi a chiamare questa API con un account gratuito, otterresti un errore.<\/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>Sostituisci il segnaposto MEETING_ID con l&#8217;ID della riunione passata. Nella risposta, riceverai i nomi e le e-mail dei partecipanti.<\/p>\n<h3>Elimina Zoom Meeting con JWT e PHP<\/h3>\n<p>Oltre a creare una riunione, Zoom fornisce anche endpoint API come elenco, aggiornamento, eliminazione di una riunione. L&#8217;utente deve seguire la documentazione dell&#8217;API per l&#8217;utilizzo di un endpoint specifico. Ad esempio, puoi <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingdelete\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">eliminare una riunione<\/a> inviando una richiesta DELETE all&#8217;endpoint dell&#8217;API Zoom. Devi passare il tuo ID riunione all&#8217;endpoint come segue.<\/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>Spero che tu sappia come creare riunioni Zoom con PHP e JWT. Per favore condividi i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.<\/p>\n<h4>articoli Correlati<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/una-guida-all-integrazione-di-hcaptcha-con-php\/\" title=\"Una guida all&#039;integrazione di hCaptcha con PHP\">Una guida all&#8217;integrazione di hCaptcha con PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/scrivi-dati-su-onedrive-sheet-utilizzando-microsoft-graph-api-e-php\/\" title=\"Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP\">Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/speech-to-text-utilizzando-amazon-transcribe-in-php\/\" title=\"Speech-to-Text utilizzando Amazon Transcribe in PHP\">Speech-to-Text utilizzando Amazon Transcribe in PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vuoi creare meeting zoom con JWT e PHP? JWT (JSON Web Tokens) \u00e8 un&#8217;alternativa a OAuth per generare il token di accesso. In questo<\/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":[276],"tags":[846],"class_list":["post-26328","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-7","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/26328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/comments?post=26328"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/26328\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media\/20149"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media?parent=26328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/categories?post=26328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/tags?post=26328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}