{"id":29756,"date":"2021-06-19T17:55:00","date_gmt":"2021-06-19T14:55:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29756"},"modified":"2021-10-17T04:13:31","modified_gmt":"2021-10-17T01:13:31","slug":"hur-man-skapar-ett-mote-med-zoom-med-hjalp-av-zoom-api-och-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/hur-man-skapar-ett-mote-med-zoom-med-hjalp-av-zoom-api-och-php\/","title":{"rendered":"Hur man skapar ett m\u00f6te med zoom med hj\u00e4lp av Zoom API och PHP"},"content":{"rendered":"<p>Nyligen arbetade jag med ett projekt d\u00e4r jag beh\u00f6vde interagera med Zoom API. I klientens applikation implementerade vi m\u00e5nga saker med hj\u00e4lp av Zoom API som konton, fakturering, m\u00f6ten, grupper, rapporter, rum osv. \u00c4ven om vi gjorde en hel del saker med hj\u00e4lp av Zoom API, kommer jag i denna handledning att fokusera p\u00e5 hur man skapa ett m\u00f6te med Zoom API och PHP.<\/p>\n<p>Som vi alla vet \u00e4r <a href=\"https:\/\/zoom.us\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom<\/a> en plattform som anv\u00e4nds f\u00f6r telekonferenser, distansutbildning etc. Det \u00e4r popul\u00e4rt bland m\u00e4nniskor f\u00f6r onlinekonferenser, m\u00f6ten, webbseminarier och andra saker.<\/p>\n<p>De som letar efter att skapa ett m\u00f6te via Zoom API m\u00e5ste v\u00e4lja antingen OAuth eller JWT f\u00f6r att interagera med sina API: er. OAuth och JWT (JSON web token) ger en h\u00f6g s\u00e4kerhetsniv\u00e5 f\u00f6r att g\u00f6ra interaktioner med tredje parts tj\u00e4nster. I denna handledning anv\u00e4nder vi OAuth-processen och kommunicerar med Zoom API genom den.<\/p>\n<p>Du kan ocks\u00e5 kontrollera sj\u00e4lvstudien <a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-skapar-zoommoten-med-php-och-jwt\/\" title=\"Zoomintegration med JWT i PHP\">Zoomintegration med JWT i PHP<\/a>.<\/p>\n<h3>Skapa en OAuth-app i zoom<\/h3>\n<p>N\u00e4r du har ditt Zoom-konto m\u00e5ste du skapa en OAuth-app i Zoom med hj\u00e4lp av nedanst\u00e5ende steg.<\/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\">Registrera din app<\/a> p\u00e5 Zoom APP Marketplace.<\/li>\n<li>N\u00e4r du registrerar en app f\u00e5r du dina genererade referenser. H\u00e4r m\u00e5ste du skicka URL f\u00f6r omdirigering f\u00f6r OAuth och vitlista URL.<\/li>\n<li>I n\u00e4sta steg anger du grundl\u00e4ggande information om din app.<\/li>\n<li>P\u00e5 fliken kan du valfritt aktivera n\u00e5gra ytterligare funktioner som h\u00e4ndelsesprenumerationer och chattprenumerationer f\u00f6r din app.<\/li>\n<li>Under fliken &quot;Omfattningar&quot; m\u00e5ste du l\u00e4gga till omfattningar ang\u00e5ende din app. Du kan till exempel l\u00e4gga till ett omf\u00e5ng f\u00f6r Zoom-m\u00f6ten.<\/li>\n<\/ul>\n<p>Om du \u00e4r p\u00e5 localhost anv\u00e4nder du <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ngrok<\/a> och genererar den lokala URL: en. I mitt fall \u00e4r ngrok-webbadresser f\u00f6r OAuth-omdirigering och vitlista-URL enligt nedan.<\/p>\n<p>Om du har problem med att skapa en OAuth-app h\u00e4nvisar du till Zoom&#8217;s officiella dokumentation om <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/build\/oauth-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Skapa en OAuth-app<\/a>.<\/p>\n<h3>Grundl\u00e4ggande installation och konfiguration<\/h3>\n<p>Jag hittade inget PHP-bibliotek som kan anv\u00e4ndas f\u00f6r att interagera med Zoom API. Genom att g\u00f6ra lite forskning kan jag hantera det via Guzzle-biblioteket och Zoom REST API. Installera Guzzle-biblioteket med kommandot:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>F\u00f6r att kunna interagera med Zoom REST API kr\u00e4vs att du skickar en \u00e5tkomsttoken. Vi kommer att generera det och lagra det i databasen. \u00c5tkomsttoken \u00e4r giltigt under en kort tidsperiod. I v\u00e5r kod kommer vi att \u00e5terskapa \u00e5tkomsttoken i bakgrunden s\u00e5 att anv\u00e4ndaren inte beh\u00f6ver g\u00f6ra auktoriseringsprocessen igen.<\/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>Eftersom vi kommer att beh\u00f6va h\u00e4mta tokenv\u00e4rden fr\u00e5n databasen m\u00e5ste vi skriva en kod f\u00f6r den. Skapa en fil <code>class-db.php<\/code>och l\u00e4gg till koden nedan i den.<\/p>\n<p><strong>klass-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>Se till att ers\u00e4tta platsh\u00e5llarna med dina faktiska databasuppgifter. L\u00e5t oss sedan skapa en \u00e5tkomsttoken genom OAuth-processen.<\/p>\n<h3>Skapa en \u00e5tkomsttoken<\/h3>\n<p>Anv\u00e4ndaren kan skapa en \u00e5tkomsttoken f\u00f6r sitt konto med hj\u00e4lp av App-referenser och OAuth-processen. Skapa en <code>config.php<\/code>fil, lagra appuppgifter och omdirigera URL i denna PHP-fil. Inkludera de andra milj\u00f6erna som DB-klass och leverant\u00f6rsbibliotek ocks\u00e5 enligt f\u00f6ljande.<\/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>Ers\u00e4tt platsh\u00e5llarna med dina appuppgifter och st\u00e4ll in samma omdirigerings-URL som du lade till i appen Zoom OAuth. I mitt fall \u00e4r omdirigerings-URL: en <code>https:\/\/f2448150.ngrok.io\/zoom\/callback.php<\/code>. Det betyder i <code>callback.php<\/code>filen att vi m\u00e5ste skriva koden som kallar ett Zoom API, beg\u00e4ra \u00e5tkomsttoken och lagra den i databasen.<\/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>L\u00e5t oss nu skapa en auktoriserad URL d\u00e4r en anv\u00e4ndare kan klicka och slutf\u00f6ra auktoriseringsprocessen. Jag ska skapa den h\u00e4r webbadressen i <code>index.php<\/code>filen.<\/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>K\u00f6r ovanst\u00e5ende fil i webbl\u00e4saren, klicka p\u00e5 l\u00e4nken &#8217;Logga in med zoom&#8217; och slutf\u00f6r auktoriseringsprocessen. Vid framg\u00e5ngsrik autentisering b\u00f6r du se ett framg\u00e5ngsmeddelande och \u00e5tkomsttoken lagras i din <code>token<\/code>tabell. Om det fungerar kan vi g\u00e5 vidare och skapa ett m\u00f6te med Zoom API.<\/p>\n<h3>Skapa ett m\u00f6te med zoom med hj\u00e4lp av Zoom API<\/h3>\n<p>Zoom ger en slutpunkt f\u00f6r att skapa ett m\u00f6te via deras REST API. Du kan l\u00e4sa om det i deras <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingcreate\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentation<\/a>. Det kr\u00e4ver att du skickar en POST-beg\u00e4ran till den angivna slutpunkten tillsammans med de n\u00f6dv\u00e4ndiga parametrarna.<\/p>\n<p>API-slutpunkten kr\u00e4ver ocks\u00e5 att en \u00e5tkomsttoken ska skickas i beh\u00f6righetshuvudet. Som jag sa tidigare har \u00e5tkomsttoken en kort livsl\u00e4ngd och vi kommer att regenerera den i bakgrunden utan att be om autentiseringsprocessen igen.<\/p>\n<p>Jag har skapat en <code>create-meeting.php<\/code>fil f\u00f6r att skicka en POST-beg\u00e4ran till slutpunkten. Jag hanterade ocks\u00e5 villkoret f\u00f6r att token upph\u00f6r att g\u00e4lla och regenerera om det l\u00f6pte ut.<\/p>\n<p><strong>skapa-m\u00f6te.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>Om du m\u00e4rkte koden har jag skickat &quot;2021-03-20T20: 30: 00&#8243; som en &#8221;starttid&#8221;. Det betyder att m\u00f6tetiden \u00e4r 20 mars 2021, 20:30. Anv\u00e4ndaren ska skicka formatet f\u00f6r det i \u00e5\u00e5\u00e5\u00e5-MM-ddTHH: mm: ss. F\u00f6r &quot;typ&quot; -tangenten skickade jag v\u00e4rdet &quot;2&quot; som \u00e4r f\u00f6r ett schemalagt m\u00f6te. Anv\u00e4ndaren m\u00e5ste ocks\u00e5 st\u00e4lla in ett m\u00f6tesl\u00f6senord som jag st\u00e4llde till &quot;123456&quot;.<\/p>\n<p>Forts\u00e4tt och k\u00f6r den h\u00e4r koden s\u00e5 ser du att ett m\u00f6te skapas i ditt Zoom-konto.<\/p>\n<h3>Lista zoomm\u00f6ten<\/h3>\n<p>Vi har skrivit en kod f\u00f6r att skapa Zoom-m\u00f6ten. Med den h\u00e4r koden kan du skapa s\u00e5 m\u00e5nga m\u00f6ten som du vill. Efter detta kanske du vill lista alla m\u00f6ten i din ans\u00f6kan.<\/p>\n<p>Zoom ger ett API genom vilket vi kan h\u00e4mta alla v\u00e5ra Zoom-m\u00f6ten. Skapa en fil <code>list-meeting.php<\/code>och anv\u00e4nd koden nedan f\u00f6r att skriva ut alla m\u00f6ten.<\/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>I ovanst\u00e5ende kod skriver jag ut ett \u00e4mne och en URL f\u00f6r m\u00f6ten. Du kan ocks\u00e5 skriva ut annan information. Skriv ut variabeln f\u00f6r <code>$data<\/code>att f\u00e5 en lista med tillg\u00e4nglig information.<\/p>\n<h3>F\u00e5 deltagare i tidigare m\u00f6ten<\/h3>\n<p>N\u00e4r m\u00f6tet \u00e4r \u00f6ver kan du f\u00e5 en lista \u00f6ver deltagare med hj\u00e4lp av Zoom API. Vi rekommenderar att du bara anropar detta API om du har ett betalt konto. Detta specifika API kr\u00e4ver ett betalt konto. Om du f\u00f6rs\u00f6ker ringa detta API med ett gratis konto f\u00e5r du ett fel.<\/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>Byt ut platsh\u00e5llaren MEETING_ID med det faktiska ID-numret f\u00f6r tidigare m\u00f6te. I svaret f\u00e5r du deltagarnas namn och e-postmeddelanden.<\/p>\n<h3>Radera ett m\u00f6te<\/h3>\n<p>Anv\u00e4ndaren kan spela med Zoom API-slutpunkter som lista, uppdatera, radera ett m\u00f6te. Allt du beh\u00f6ver g\u00f6ra \u00e4r att f\u00f6lja deras riktlinjer f\u00f6r anv\u00e4ndning av specifika slutpunkter. Du kan till exempel ta bort ett m\u00f6te genom att skicka en DELETE-beg\u00e4ran till API-slutpunkten. Till den h\u00e4r slutpunkten m\u00e5ste du skicka ditt m\u00f6tes-ID enligt nedan.<\/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>Jag hoppas att du fick veta hur du skapar ett m\u00f6te med Zoom API och PHP. Jag skulle vilja h\u00f6ra dina tankar och f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-anvander-youtube-api-for-att-ladda-upp-video-pa-youtube-kanal\/\" title=\"Hur man anv\u00e4nder YouTube API f\u00f6r att ladda upp video p\u00e5 YouTube-kanal\">Hur man anv\u00e4nder YouTube API f\u00f6r att ladda upp video p\u00e5 YouTube-kanal<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-anvander-guzzle-en-php-http-klient-for-att-skicka-http-forfragningar\/\" title=\"Hur man anv\u00e4nder Guzzle f\u00f6r att skicka HTTP-f\u00f6rfr\u00e5gningar\">Hur man anv\u00e4nder Guzzle f\u00f6r att skicka HTTP-f\u00f6rfr\u00e5gningar<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/skriv-data-till-onedrive-ark-med-microsoft-graph-api-och-php\/\" title=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\">Skriv data till OneDrive-ark med Microsoft Graph API och PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vill du skapa ett m\u00f6te om Zoom med Zoom API och PHP? I den h\u00e4r artikeln kommer jag att f\u00f6rklara hur man interagerar med Zoom API och genererar<\/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":[279],"tags":[850],"class_list":["post-29756","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29756"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29756\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20151"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}