{"id":29605,"date":"2021-06-19T17:55:00","date_gmt":"2021-06-19T14:55:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29605"},"modified":"2021-10-17T16:15:10","modified_gmt":"2021-10-17T13:15:10","slug":"como-crear-una-reunion-en-zoom-usando-zoom-api-y-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-crear-una-reunion-en-zoom-usando-zoom-api-y-php\/","title":{"rendered":"C\u00f3mo crear una reuni\u00f3n en Zoom usando Zoom API y PHP"},"content":{"rendered":"<p>Recientemente estaba trabajando en un proyecto en el que necesitaba interactuar con la API de Zoom. En la aplicaci\u00f3n del cliente, implementamos muchas cosas usando la API de Zoom, como Cuentas, Facturaci\u00f3n, Reuniones, Grupos, Informes, Salas, etc. Aunque hicimos muchas cosas usando la API de Zoom, en este tutorial me enfocar\u00e9 en c\u00f3mo cree una reuni\u00f3n utilizando Zoom API y PHP.<\/p>\n<p>Como todos sabemos, <a href=\"https:\/\/zoom.us\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom<\/a> es una plataforma que se utiliza para teleconferencias, teletrabajo, educaci\u00f3n a distancia, etc. Es popular entre las personas para conferencias en l\u00ednea, reuniones, seminarios web y otras cosas.<\/p>\n<p>Aquellos que buscan crear una reuni\u00f3n a trav\u00e9s de la API de Zoom deben elegir OAuth o JWT para interactuar con sus API. OAuth y JWT (token web JSON) proporcionan un alto nivel de seguridad para realizar interacciones con los servicios de terceros. En este tutorial, usaremos el proceso OAuth y nos comunicaremos con la API de Zoom a trav\u00e9s de \u00e9l.<\/p>\n<p>Tambi\u00e9n puede consultar el tutorial <a href=\"https:\/\/themewp.inform.click\/es\/como-crear-reuniones-de-zoom-con-php-y-jwt\/\" title=\"Integraci\u00f3n de Zoom con JWT en PHP\">Integraci\u00f3n de Zoom con JWT en PHP<\/a>.<\/p>\n<h3>Cree una aplicaci\u00f3n OAuth en Zoom<\/h3>\n<p>Una vez que tenga su cuenta de Zoom, debe crear una aplicaci\u00f3n OAuth en Zoom siguiendo los pasos a continuaci\u00f3n.<\/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\">Registre su aplicaci\u00f3n<\/a> en Zoom APP Marketplace.<\/li>\n<li>Al registrar una aplicaci\u00f3n, obtendr\u00e1 sus credenciales generadas. Aqu\u00ed debe pasar la URL de redireccionamiento para OAuth y la URL de la lista blanca.<\/li>\n<li>En el siguiente paso, ingrese la informaci\u00f3n b\u00e1sica sobre su aplicaci\u00f3n.<\/li>\n<li>En la pesta\u00f1a, puede habilitar opcionalmente algunas funciones adicionales, como suscripciones a eventos y suscripciones a chat, para su aplicaci\u00f3n.<\/li>\n<li>En la pesta\u00f1a &#8216;\u00c1mbitos&#8217;, debe agregar \u00e1mbitos relacionados con su aplicaci\u00f3n. Por ejemplo, puede agregar un \u00e1mbito para las reuniones de Zoom.<\/li>\n<\/ul>\n<p>Si est\u00e1 en localhost, utilice <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ngrok<\/a> y genere la URL local. En mi caso, las URL de ngrok para la redirecci\u00f3n de OAuth y la URL de la lista blanca son las que se muestran a continuaci\u00f3n.<\/p>\n<p>Si tiene alg\u00fan problema con la creaci\u00f3n de una aplicaci\u00f3n OAuth, consulte la documentaci\u00f3n oficial de Zoom sobre <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/build\/oauth-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Crear una aplicaci\u00f3n OAuth<\/a>.<\/p>\n<h3>Instalaci\u00f3n y configuraci\u00f3n b\u00e1sicas<\/h3>\n<p>No encontr\u00e9 ninguna biblioteca PHP que pueda usarse para interactuar con la API de Zoom. Investigando un poco, puedo administrarlo a trav\u00e9s de la biblioteca Guzzle y la API REST de Zoom. Instale la biblioteca Guzzle usando el comando:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Para interactuar con Zoom REST API es necesario enviar un token de acceso. Lo vamos a generar y almacenar en la base de datos. El token de acceso es v\u00e1lido por un corto per\u00edodo de tiempo. En nuestro c\u00f3digo, regeneraremos el token de acceso en segundo plano para que el usuario no tenga que volver a realizar el proceso de autorizaci\u00f3n.<\/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>Como necesitaremos obtener valores de token de la base de datos, debemos escribir un c\u00f3digo para ello. Cree un archivo <code>class-db.php<\/code>y agregue el c\u00f3digo a continuaci\u00f3n.<\/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>Aseg\u00farese de reemplazar los marcadores de posici\u00f3n con sus credenciales de base de datos reales. A continuaci\u00f3n, generemos un token de acceso a trav\u00e9s del proceso OAuth.<\/p>\n<h3>Generar un token de acceso<\/h3>\n<p>El usuario puede crear un token de acceso para su cuenta utilizando las credenciales de la aplicaci\u00f3n y el proceso OAuth. Cree un <code>config.php<\/code>archivo, almacene las credenciales de la aplicaci\u00f3n y redireccione la URL en este archivo PHP. Incluya los otros entornos como la clase DB y la biblioteca del proveedor tambi\u00e9n de la siguiente manera.<\/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>Reemplace los marcadores de posici\u00f3n con las credenciales de su aplicaci\u00f3n y configure la misma URL de redireccionamiento que agreg\u00f3 en la aplicaci\u00f3n Zoom OAuth. En mi caso, la URL de redireccionamiento es <code>https:\/\/f2448150.ngrok.io\/zoom\/callback.php<\/code>. Significa que en el <code>callback.php<\/code>archivo, tenemos que escribir el c\u00f3digo que llama a una API de Zoom, solicitar un token de acceso y almacenarlo en la base de datos.<\/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>Ahora, generemos una URL autorizada donde un usuario puede hacer clic y completar el proceso de autorizaci\u00f3n. Voy a crear esta URL en el <code>index.php<\/code>archivo.<\/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>Ejecute el archivo anterior en el navegador, haga clic en el enlace &#8216;Iniciar sesi\u00f3n con Zoom&#8217; y complete el proceso de autorizaci\u00f3n. En la autenticaci\u00f3n exitosa, deber\u00eda ver un mensaje de \u00e9xito y el token de acceso se almacenar\u00eda en su <code>token<\/code>tabla. Si eso funciona, podemos seguir adelante y crear una reuni\u00f3n con la API de Zoom.<\/p>\n<h3>Cree una reuni\u00f3n en Zoom usando la API de Zoom<\/h3>\n<p>Zoom proporciona un punto final para crear una reuni\u00f3n a trav\u00e9s de su API REST. Puede leerlo en su <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingcreate\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentaci\u00f3n<\/a>. Requiere enviar una solicitud POST al punto final dado junto con los par\u00e1metros requeridos.<\/p>\n<p>El punto final de la API tambi\u00e9n requiere que se pase un token de acceso en el encabezado de autorizaci\u00f3n. Como dije anteriormente, el token de acceso tiene una vida corta y lo vamos a regenerar en segundo plano sin volver a solicitar el proceso de autenticaci\u00f3n.<\/p>\n<p>He creado un <code>create-meeting.php<\/code>archivo para enviar una solicitud POST al punto final. Tambi\u00e9n manej\u00e9 la condici\u00f3n de caducidad del token y la regeneraci\u00f3n si caduca.<\/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>Si has notado el c\u00f3digo, he pasado &quot;2021-03-20T20: 30: 00&quot; como &quot;hora de inicio&quot;. Significa que la hora de la reuni\u00f3n ser\u00e1 el 20 de marzo de 2021, a las 20:30 horas. El usuario debe pasar el formato. en aaaa-MM-ddTHH: mm: ss. Para la clave &quot;tipo&quot;, pas\u00e9 el valor &quot;2&quot;, que es para una reuni\u00f3n programada. El usuario tambi\u00e9n debe establecer una contrase\u00f1a de reuni\u00f3n que configur\u00e9 en &quot;123456&quot;.<\/p>\n<p>Contin\u00fae y ejecute este c\u00f3digo y deber\u00eda ver que se crea una reuni\u00f3n en su cuenta de Zoom.<\/p>\n<h3>Lista de reuniones de Zoom<\/h3>\n<p>Hemos escrito un c\u00f3digo para crear reuniones de Zoom. Con este c\u00f3digo, puede crear tantas reuniones como desee. Despu\u00e9s de esto, es posible que desee enumerar todas las reuniones en su aplicaci\u00f3n.<\/p>\n<p>Zoom proporciona una API a trav\u00e9s de la cual podemos obtener todas nuestras reuniones de Zoom. Cree un archivo <code>list-meeting.php<\/code>y use el c\u00f3digo a continuaci\u00f3n que imprimir\u00e1 todas las reuniones.<\/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>En el c\u00f3digo anterior, estoy imprimiendo un tema y una URL de reuniones. Tambi\u00e9n puede imprimir otra informaci\u00f3n. Imprima la variable <code>$data<\/code>para obtener una lista de la informaci\u00f3n disponible.<\/p>\n<h3>Obtenga participantes anteriores de la reuni\u00f3n<\/h3>\n<p>Una vez que finaliza la reuni\u00f3n, puede obtener una lista de participantes utilizando la API de Zoom. Se recomienda llamar a esta API solo si tiene una cuenta paga. Esta API espec\u00edfica requiere tener una cuenta paga. Si intenta llamar a esta API con una cuenta gratuita, obtendr\u00e1 un error.<\/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>Reemplaza el marcador de posici\u00f3n MEETING_ID con el ID de la reuni\u00f3n anterior real. En la respuesta, obtendr\u00e1 los nombres y correos electr\u00f3nicos de los participantes.<\/p>\n<h3>Eliminar una reuni\u00f3n<\/h3>\n<p>El usuario puede jugar con los puntos finales de la API de Zoom como listar, actualizar, eliminar una reuni\u00f3n. Todo lo que necesita hacer es seguir sus pautas sobre el uso de puntos finales espec\u00edficos. Por ejemplo, puede eliminar una reuni\u00f3n enviando una solicitud DELETE al punto final de la API. Para este punto final, debe pasar su identificaci\u00f3n de reuni\u00f3n como se muestra a continuaci\u00f3n.<\/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>Espero que sepas c\u00f3mo crear una reuni\u00f3n usando Zoom API y PHP. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-usar-la-api-de-youtube-para-cargar-videos-en-el-canal-de-youtube\/\" title=\"C\u00f3mo usar la API de YouTube para cargar videos en el canal de YouTube\">C\u00f3mo usar la API de YouTube para cargar videos en el canal de YouTube<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-utilizar-guzzle-un-cliente-http-php-para-enviar-solicitudes-http\/\" title=\"C\u00f3mo utilizar Guzzle para enviar solicitudes HTTP\">C\u00f3mo utilizar Guzzle para enviar solicitudes HTTP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/escribir-datos-en-la-hoja-de-onedrive-usando-microsoft-graph-api-y-php\/\" title=\"Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP\">Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfEst\u00e1 buscando crear una reuni\u00f3n en Zoom usando Zoom API y PHP? En este art\u00edculo, explicar\u00e9 c\u00f3mo interactuar con Zoom API y generar<\/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":[271],"tags":[849],"class_list":["post-29605","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29605"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29605\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/20151"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}