{"id":26052,"date":"2021-06-19T17:35:00","date_gmt":"2021-06-19T14:35:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26052"},"modified":"2021-10-18T02:28:15","modified_gmt":"2021-10-17T23:28:15","slug":"so-erstellen-sie-zoom-meetings-mit-php-und-jwt","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/so-erstellen-sie-zoom-meetings-mit-php-und-jwt\/","title":{"rendered":"So erstellen Sie Zoom-Meetings mit PHP und JWT"},"content":{"rendered":"<p>In der Vergangenheit habe ich einen Artikel geschrieben, der erkl\u00e4rt <a href=\"https:\/\/themewp.inform.click\/de\/so-erstellen-sie-ein-meeting-in-zoom-mit-zoom-api-und-php\/\" title=\", wie man ein Zoom-Meeting mit PHP und OAuth erstellt\" >, wie man ein Zoom-Meeting mit PHP und OAuth erstellt<\/a>. Einer unserer Leser fragte nach dem Erstellen eines Zoom-Meetings mit JWT (JSON Web Tokens) und PHP. <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/auth\/jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Die Zoom-<\/a> API erm\u00f6glicht es uns, sowohl OAuth als auch JWT zu verwenden, um mit ihren APIs umzugehen. Die Zoom-API erfordert das entweder \u00fcber OAuth oder JWT generierte Bearer Token.<\/p>\n<p><strong>Hinweis<\/strong>: JWT darf nur f\u00fcr interne Anwendungen und Prozesse verwendet werden. Alle Apps, die f\u00fcr die Verwendung durch Drittanbieter erstellt wurden, m\u00fcssen den OAuth-App-Typ verwenden.<\/p>\n<p>Wenn Sie eine Zoom-App f\u00fcr den internen Gebrauch erstellen m\u00f6chten, ist der JWT-Ansatz im Vergleich zu OAuth einfacher.<\/p>\n<h3>Einstieg<\/h3>\n<p>Um zu beginnen, gehen Sie zum Zoom Developer Dashboard und erstellen Sie eine <a href=\"https:\/\/marketplace.zoom.us\/develop\/create\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">neue App<\/a>. W\u00e4hlen Sie <code>JWT<\/code>als App-Typ aus und kopieren Sie den Zoom-API-Schl\u00fcssel und das Geheimnis.<\/p>\n<p>Ein einzelnes JWT besteht aus drei Komponenten: Header, Payload und Signature mit jeweils einer <code>.<\/code>Trennung. Beispielsweise:<code>aaaaa.bbbbb.ccccc<\/code><\/p>\n<p>Es stehen mehrere Bibliotheken zur Verf\u00fcgung, die beim Generieren von JWT helfen. Ich empfehle die Verwendung der <a href=\"https:\/\/github.com\/firebase\/php-jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Firebase\/php-jwt-<\/a> Bibliothek. Diese Bibliothek bietet einen viel einfacheren Ansatz zum Erstellen von JWT. Installieren Sie diese Bibliothek mit dem folgenden Befehl.<\/p>\n<pre><code>composer require firebase\/php-jwt<\/code><\/pre>\n<p>Als n\u00e4chstes m\u00fcssen wir eine POST-Anfrage an die Zoom-API senden, um ein Meeting zu erstellen. Dazu kann man cURL verwenden. Aber ich pers\u00f6nlich mag einen <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle,<\/a> der viel saubereren Code bietet als cURL. Ein weiterer Vorteil der Verwendung von Guzzle besteht darin, dass die cURL-Erweiterung auf dem Server nicht aktiviert sein muss.<\/p>\n<p>F\u00fchren Sie den folgenden Befehl aus, um die Guzzle-Bibliothek zu installieren.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<h3>Zoom-Meetings mit JWT und PHP erstellen<\/h3>\n<p>Wir haben zwei Pakete installiert, um unser Ziel zu erreichen. Jetzt m\u00fcssen wir die Umgebung in unsere PHP-Datei aufnehmen. Au\u00dferdem haben wir in den vorherigen Schritten Zoom-API-Schl\u00fcssel kopiert. Lassen Sie uns diese Schl\u00fcssel als Konstanten in PHP definieren.<\/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>Als N\u00e4chstes, um JWT mit dem <code>firebase\/php-jwt<\/code>Paket zu generieren, sieht unser Code wie folgt aus.<\/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>Um ein Zoom-Meeting zu erstellen, muss es schlie\u00dflich eine POST-Anfrage <code>\/v2\/users\/me\/meetings<\/code>mit JWT als <strong>Bearer Token<\/strong> an den Endpunkt senden .<\/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>Zoom-Meetings auflisten<\/h3>\n<p>In Ihrer Bewerbung m\u00f6chten Sie vielleicht alle Zoom-Meetings auflisten. Zoom bietet eine API, \u00fcber die wir eine Liste aller Zoom-Meetings erhalten k\u00f6nnen. Mit dem folgenden Code k\u00f6nnen Sie die Details Ihrer Zoom-Meetings ausdrucken.<\/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>Hier drucke ich ein Thema und eine URL von Meetings. Sie k\u00f6nnen auch andere Informationen ausdrucken. Drucken Sie die Variable <code>$data<\/code>, um eine Liste der verf\u00fcgbaren Informationen zu erhalten.<\/p>\n<h3>Fr\u00fchere Meeting-Teilnehmer abrufen<\/h3>\n<p>F\u00fcr die vergangenen Meetings k\u00f6nnen Sie \u00fcber die Zoom-API eine Teilnehmerliste abrufen. Wenn Sie ein kostenpflichtiges Konto haben, k\u00f6nnen Sie diese spezielle API verwenden. Diese API erfordert ein kostenpflichtiges Konto. Wenn Sie versuchen, diese API mit einem kostenlosen Konto aufzurufen, erhalten Sie eine Fehlermeldung.<\/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>Ersetzen Sie den Platzhalter MEETING_ID durch die tats\u00e4chliche ID der letzten Besprechung. In der Antwort erhalten Sie die Namen und E-Mails der Teilnehmer.<\/p>\n<h3>Zoom Meeting mit JWT und PHP l\u00f6schen and<\/h3>\n<p>Beim Hinzuf\u00fcgen zum Erstellen eines Meetings bietet Zoom auch API-Endpunkte wie Auflisten, Aktualisieren und L\u00f6schen eines Meetings. Der Benutzer muss seine API-Dokumentation befolgen, um einen bestimmten Endpunkt zu verwenden. Sie k\u00f6nnen beispielsweise <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingdelete\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ein Meeting l\u00f6schen,<\/a> indem Sie eine DELETE-Anfrage an den Zoom-API-Endpunkt senden. Sie m\u00fcssen Ihre Meeting-ID wie folgt an den Endpunkt \u00fcbergeben.<\/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>Ich hoffe, Sie haben etwas \u00fcber das Erstellen von Zoom-Meetings mit PHP und JWT erfahren. Bitte teilen Sie Ihre Gedanken und Vorschl\u00e4ge im Kommentarbereich unten mit.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/eine-anleitung-zur-hcaptcha-integration-mit-php\/\" title=\"Eine Anleitung zur hCaptcha-Integration mit PHP\">Eine Anleitung zur hCaptcha-Integration mit PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/schreiben-von-daten-in-onedrive-sheet-mit-microsoft-graph-api-und-php\/\" title=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\">Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/speech-to-text-mit-amazon-transcribe-in-php\/\" title=\"Speech-to-Text mit Amazon Transcribe in PHP\">Speech-to-Text mit Amazon Transcribe in PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sie m\u00f6chten Zoom-Meetings mit JWT und PHP erstellen? JWT (JSON Web Tokens) ist eine Alternative zu OAuth, um das Zugriffstoken zu generieren. In diesem<\/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":[272],"tags":[845],"class_list":["post-26052","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-3","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/26052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=26052"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/26052\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/20149"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=26052"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=26052"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=26052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}