{"id":26038,"date":"2021-06-19T18:01:00","date_gmt":"2021-06-19T15:01:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26038"},"modified":"2021-10-18T02:28:10","modified_gmt":"2021-10-17T23:28:10","slug":"so-erstellen-sie-ein-meeting-in-zoom-mit-zoom-api-und-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/so-erstellen-sie-ein-meeting-in-zoom-mit-zoom-api-und-php\/","title":{"rendered":"So erstellen Sie ein Meeting in Zoom mit Zoom API und PHP"},"content":{"rendered":"<p>Vor kurzem arbeitete ich an einem Projekt, bei dem ich mit der Zoom-API interagieren musste. In der Anwendung des Kunden haben wir viele Dinge mit der Zoom-API implementiert, wie Konten, Abrechnung, Meetings, Gruppen, Berichte, R\u00e4ume usw. Obwohl wir viele Dinge mit der Zoom-API gemacht haben, werde ich mich in diesem Tutorial darauf konzentrieren, wie es geht Erstellen Sie ein Meeting mit Zoom API und PHP.<\/p>\n<p>Wie wir alle wissen, ist <a href=\"https:\/\/zoom.us\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom<\/a> eine Plattform, die f\u00fcr Telekonferenzen, Telearbeit, Fernunterricht usw. verwendet wird. Es ist bei Menschen beliebt f\u00fcr Online-Konferenzen, Meetings, Webinare und andere Dinge.<\/p>\n<p>Diejenigen, die ein Meeting \u00fcber die Zoom-API erstellen m\u00f6chten, m\u00fcssen entweder OAuth oder JWT w\u00e4hlen, um mit ihren APIs zu interagieren. OAuth und JWT (JSON-Webtoken) bieten ein hohes Ma\u00df an Sicherheit, um Interaktionen mit den Diensten von Drittanbietern durchzuf\u00fchren. In diesem Tutorial verwenden wir den OAuth-Prozess und kommunizieren dar\u00fcber mit der Zoom-API.<\/p>\n<p>Sie k\u00f6nnen auch das Tutorial <a href=\"https:\/\/themewp.inform.click\/de\/so-erstellen-sie-zoom-meetings-mit-php-und-jwt\/\" title=\"Zoom-Integration mit JWT in PHP\">Zoom-Integration mit JWT in PHP<\/a> \u00fcberpr\u00fcfen .<\/p>\n<h3>Erstellen Sie eine OAuth-App auf Zoom<\/h3>\n<p>Sobald Sie Ihr Zoom-Konto haben, m\u00fcssen Sie mit den folgenden Schritten eine OAuth-App auf Zoom erstellen.<\/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\">Registrieren Sie Ihre App<\/a> auf dem Zoom APP Marketplace.<\/li>\n<li>Bei der Registrierung einer App erhalten Sie Ihre generierten Zugangsdaten. Hier m\u00fcssen Sie die Weiterleitungs-URL f\u00fcr OAuth und die Whitelist-URL \u00fcbergeben.<\/li>\n<li>Geben Sie im n\u00e4chsten Schritt die grundlegenden Informationen zu Ihrer App ein.<\/li>\n<li>Auf der Registerkarte k\u00f6nnen Sie optional einige zus\u00e4tzliche Funktionen wie Event-Abonnements und Chat-Abonnements f\u00fcr Ihre App aktivieren.<\/li>\n<li>Auf der Registerkarte &quot;Bereiche&quot; m\u00fcssen Sie Bereiche f\u00fcr Ihre App hinzuf\u00fcgen. Sie k\u00f6nnen beispielsweise einen Bereich f\u00fcr Zoom-Meetings hinzuf\u00fcgen.<\/li>\n<\/ul>\n<p>Wenn Sie sich auf localhost befinden, verwenden Sie den <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ngrok<\/a> und generieren Sie die lokale URL. In meinem Fall sind die ngrok-URLs f\u00fcr die OAuth-Umleitung und die Whitelist-URL wie unten gezeigt.<\/p>\n<p>Wenn Sie Probleme beim Erstellen einer OAuth-App haben, lesen Sie bitte die offizielle Dokumentation von Zoom zum <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/build\/oauth-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Erstellen einer OAuth-App<\/a>.<\/p>\n<h3>Grundlegende Einrichtung und Konfiguration<\/h3>\n<p>Ich habe keine PHP-Bibliothek gefunden, die verwendet werden kann, um mit der Zoom-API zu interagieren. Wenn ich etwas recherchiere, kann ich es \u00fcber die Guzzle-Bibliothek und die Zoom-REST-API verwalten. Installieren Sie die Guzzle-Bibliothek mit dem Befehl:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Um mit der Zoom REST API zu interagieren, muss ein Zugriffstoken gesendet werden. Wir werden es generieren und in der Datenbank speichern. Das Zugriffstoken ist f\u00fcr einen kurzen Zeitraum g\u00fcltig. In unserem Code werden wir das Zugriffstoken im Hintergrund neu generieren, damit der Benutzer den Autorisierungsvorgang nicht erneut durchf\u00fchren muss.<\/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>Da wir Tokenwerte aus der Datenbank abrufen m\u00fcssen, m\u00fcssen wir einen Code daf\u00fcr schreiben. Erstellen Sie eine Datei <code>class-db.php<\/code>und f\u00fcgen Sie den folgenden Code darin ein.<\/p>\n<p><strong>class-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>Stellen Sie sicher, dass Sie die Platzhalter durch Ihre tats\u00e4chlichen Datenbankanmeldeinformationen ersetzen. Als N\u00e4chstes generieren wir ein Zugriffstoken \u00fcber den OAuth-Prozess.<\/p>\n<h3>Generieren Sie ein Zugriffstoken<\/h3>\n<p>Der Benutzer kann mithilfe der App-Anmeldeinformationen und des OAuth-Prozesses ein Zugriffstoken f\u00fcr sein Konto erstellen. Erstellen Sie eine <code>config.php<\/code>Datei, speichern Sie App-Anmeldeinformationen und leiten Sie die URL in dieser PHP-Datei um. Beziehen Sie die anderen Umgebungen wie die DB-Klasse und die Herstellerbibliothek ebenfalls wie folgt ein.<\/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>Ersetzen Sie die Platzhalter durch Ihre App-Anmeldeinformationen und legen Sie dieselbe Weiterleitungs-URL fest, die Sie in der Zoom OAuth-App hinzugef\u00fcgt haben. In meinem Fall lautet die Weiterleitungs-URL <code>https:\/\/f2448150.ngrok.io\/zoom\/callback.php<\/code>. Das bedeutet <code>callback.php<\/code>, dass wir in die Datei den Code schreiben m\u00fcssen, der eine Zoom-API aufruft, ein Zugriffstoken anfordern und in der Datenbank speichern m\u00fcssen.<\/p>\n<p><strong>callback.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>Lassen Sie uns nun eine autorisierte URL generieren, auf die ein Benutzer klicken und den Autorisierungsvorgang abschlie\u00dfen kann. Ich werde diese URL in der <code>index.php<\/code>Datei erstellen.<\/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>F\u00fchren Sie die obige Datei im Browser aus, klicken Sie auf den Link \u201eMit Zoom anmelden&#8220; und schlie\u00dfen Sie den Autorisierungsvorgang ab. Bei erfolgreicher Authentifizierung sollten Sie eine Erfolgsmeldung sehen und das Zugriffstoken w\u00fcrde in Ihrer <code>token<\/code>Tabelle gespeichert. Wenn das funktioniert, k\u00f6nnen wir mit der Zoom-API ein Meeting erstellen.<\/p>\n<h3>Erstellen Sie ein Meeting in Zoom mit der Zoom-API<\/h3>\n<p>Zoom bietet einen Endpunkt zum Erstellen eines Meetings \u00fcber seine REST-API. Sie k\u00f6nnen dies in ihrer <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingcreate\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dokumentation<\/a> nachlesen. Es erfordert das Senden einer POST-Anfrage an den angegebenen Endpunkt zusammen mit den erforderlichen Parametern.<\/p>\n<p>Der API-Endpunkt erfordert auch die \u00dcbergabe eines Zugriffstokens im Authorization-Header. Wie ich bereits sagte, hat das Zugriffstoken eine kurze Lebensdauer und wir werden es im Hintergrund neu generieren, ohne erneut nach dem Authentifizierungsprozess zu fragen.<\/p>\n<p>Ich habe eine <code>create-meeting.php<\/code>Datei zum Senden einer POST-Anfrage an den Endpunkt erstellt. Ich habe auch die Bedingung des Tokenablaufs behandelt und ihn bei Ablauf neu generiert.<\/p>\n<p><strong>create-meeting.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>Wenn Ihnen der Code aufgefallen ist, habe ich &quot;2021-03-20T20:30:00&quot; als &#8217;start_time&#8216; \u00fcbergeben. Dies bedeutet, dass die Besprechungszeit der 20. M\u00e4rz 2021, 20:30 Uhr ist. Der Benutzer sollte das Format daf\u00fcr \u00fcbergeben in yyyy-MM-ddTHH:mm:ss. F\u00fcr den &#8218;Typ&#8216;-Schl\u00fcssel habe ich den Wert &#8218;2&#8216; \u00fcbergeben, der f\u00fcr ein geplantes Meeting steht.Der Benutzer muss auch ein Meeting-Passwort festlegen, das ich auf &#8218;123456&#8216; gesetzt habe.<\/p>\n<p>Fahren Sie fort und f\u00fchren Sie diesen Code aus und Sie sollten sehen, dass ein Meeting in Ihrem Zoom-Konto erstellt wird.<\/p>\n<h3>Zoom-Meetings auflisten<\/h3>\n<p>Wir haben einen Code zum Erstellen von Zoom-Meetings geschrieben. Mit diesem Code k\u00f6nnen Sie beliebig viele Besprechungen erstellen. Danach m\u00f6chten Sie vielleicht alle Meetings in Ihrer Anwendung auflisten.<\/p>\n<p>Zoom bietet eine API, \u00fcber die wir alle unsere Zoom-Meetings abrufen k\u00f6nnen. Erstellen Sie eine Datei <code>list-meeting.php<\/code>und verwenden Sie den unten stehenden Code, um alle Meetings zu drucken.<\/p>\n<p><strong>list-meeting.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>Im obigen Code 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>Sobald das Meeting vorbei ist, k\u00f6nnen Sie \u00fcber die Zoom-API eine Liste der Teilnehmer abrufen. Es wird empfohlen, diese API nur aufzurufen, wenn Sie ein kostenpflichtiges Konto haben. Diese spezielle API erfordert ein kostenpflichtiges Konto. Wenn Sie versuchen, diese API mit einem kostenlosen Konto aufzurufen, erhalten Sie eine Fehlermeldung.<\/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>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>Eine Besprechung l\u00f6schen<\/h3>\n<p>Der Benutzer kann mit den Zoom-API-Endpunkten wie Auflisten, Aktualisieren und L\u00f6schen eines Meetings spielen. Sie m\u00fcssen lediglich deren Richtlinien zur Verwendung bestimmter Endpunkte befolgen. Sie k\u00f6nnen beispielsweise ein Meeting l\u00f6schen, indem Sie eine DELETE-Anfrage an den API-Endpunkt senden. An diesen Endpunkt m\u00fcssen Sie Ihre Meeting-ID wie unten gezeigt \u00fcbergeben.<\/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>Ich hoffe, Sie haben gelernt, wie man ein Meeting mit Zoom API und PHP erstellt. Ich w\u00fcrde gerne Ihre Gedanken und Vorschl\u00e4ge im Kommentarbereich unten h\u00f6ren.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-verwenden-sie-die-youtube-api-zum-hochladen-von-videos-auf-dem-youtube-kanal\/\" title=\"So verwenden Sie die YouTube-API zum Hochladen von Videos auf dem YouTube-Kanal\">So verwenden Sie die YouTube-API zum Hochladen von Videos auf dem YouTube-Kanal<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-verwenden-sie-guzzle-ein-php-http-client-zum-senden-von-http-anfragen\/\" title=\"So verwenden Sie Guzzle zum Senden von HTTP-Anfragen\">So verwenden Sie Guzzle zum Senden von HTTP-Anfragen<\/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<\/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>M\u00f6chten Sie ein Meeting auf Zoom mit Zoom API und PHP erstellen? In diesem Artikel erkl\u00e4re ich, wie man mit der Zoom-API interagiert und generiert<\/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":[272],"tags":[845],"class_list":["post-26038","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\/26038","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=26038"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/26038\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/20151"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=26038"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=26038"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=26038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}