{"id":26063,"date":"2021-06-19T17:12:00","date_gmt":"2021-06-19T14:12:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26063"},"modified":"2021-10-17T20:15:01","modified_gmt":"2021-10-17T17:15:01","slug":"zoom-kokousten-luominen-php-n-ja-jwt-n-avulla","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/zoom-kokousten-luominen-php-n-ja-jwt-n-avulla\/","title":{"rendered":"Zoom-kokousten luominen PHP: n ja JWT: n avulla"},"content":{"rendered":"<p>Aiemmin olen kirjoittanut artikkelin, joka selitt\u00e4\u00e4 <a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-luoda-kokous-zoomilla-kayttamalla-zoom-api-ta-ja-php-ta\/\" title=\"Zoom-kokouksen luomisen PHP: n ja OAuthin kanssa\" >Zoom-kokouksen luomisen PHP: n ja OAuthin kanssa<\/a>. Yksi lukijoistamme kysyi Zoom-kokouksen luomisesta JWT: n (JSON Web Tokens) ja PHP: n avulla. <a href=\"https:\/\/marketplace.zoom.us\/docs\/guides\/auth\/jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zoom-<\/a> sovellusliittym\u00e4 antaa meille mahdollisuuden k\u00e4ytt\u00e4\u00e4 sek\u00e4 OAuthia ett\u00e4 JWT: t\u00e4 niiden sovellusliittymien k\u00e4sittelemiseksi. Zoom-sovellusliittym\u00e4 vaatii joko OAuthin tai JWT: n kautta generoidun Bearer-tunnuksen.<\/p>\n<p><strong>Huomaa<\/strong>: JWT: t\u00e4 voidaan k\u00e4ytt\u00e4\u00e4 vain sis\u00e4isiin sovelluksiin ja prosesseihin. Kaikkien kolmannen osapuolen k\u00e4ytt\u00f6\u00f6n luotujen sovellusten on k\u00e4ytett\u00e4v\u00e4 OAuth-sovellustyyppi\u00e4.<\/p>\n<p>Kun haluat rakentaa Zoom-sovelluksen sis\u00e4iseen k\u00e4ytt\u00f6\u00f6n, JWT-l\u00e4hestymistapa on helpompaa kuin OAuth.<\/p>\n<h3>P\u00e4\u00e4st\u00e4 alkuun<\/h3>\n<p>Aloita siirtym\u00e4ll\u00e4 Zoom Developer Dashboardiin ja luomalla <a href=\"https:\/\/marketplace.zoom.us\/develop\/create\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">uusi sovellus<\/a>. Valitse <code>JWT<\/code>sovellustyypiksi ja kopioi Zoom-sovellusliittym\u00e4avain ja salaisuus.<\/p>\n<p>Yksi JWT koostuu kolmesta osasta: otsikko, hy\u00f6tykuorma ja allekirjoitus <code>.<\/code>erottamalla ne toisistaan. Esimerkiksi:<code>aaaaa.bbbbb.ccccc<\/code><\/p>\n<p>Saatavilla on useita kirjastoja, jotka auttavat tuottamaan JWT: t\u00e4. Suosittelen k\u00e4ytt\u00e4m\u00e4\u00e4n <a href=\"https:\/\/github.com\/firebase\/php-jwt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">firebase \/ php-jwt-<\/a> kirjastoa. T\u00e4m\u00e4 kirjasto tarjoaa paljon helpomman tavan luoda JWT. Asenna t\u00e4m\u00e4 kirjasto alla olevan komennon avulla.<\/p>\n<pre><code>composer require firebase\/php-jwt<\/code><\/pre>\n<p>Seuraavaksi meid\u00e4n on l\u00e4hetett\u00e4v\u00e4 POST-pyynt\u00f6 Zoom-sovellusliittym\u00e4lle kokouksen luomiseksi. CURL: \u00e4\u00e4 voidaan k\u00e4ytt\u00e4\u00e4 t\u00e4h\u00e4n tarkoitukseen. Pid\u00e4n kuitenkin henkil\u00f6kohtaisesti <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzlesta,<\/a> joka tarjoaa paljon puhtaamman koodin kuin cURL. Toinen etu Guzzlen k\u00e4yt\u00f6st\u00e4 on, ett\u00e4 sinun ei tarvitse olla cURL-laajennusta k\u00e4yt\u00f6ss\u00e4 palvelimella.<\/p>\n<p>Asenna Guzzlen kirjasto suorittamalla seuraava komento.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<h3>Luo Zoom-kokouksia JWT: n ja PHP: n avulla<\/h3>\n<p>Olemme asentaneet kaksi pakettia tavoitteemme saavuttamiseksi. Nyt meid\u00e4n on sis\u00e4llytett\u00e4v\u00e4 sen ymp\u00e4rist\u00f6 PHP-tiedostoon. Olemme my\u00f6s kopioineet Zoom API -avaimet edellisiss\u00e4 vaiheissa. M\u00e4\u00e4ritet\u00e4\u00e4n n\u00e4m\u00e4 avaimet vakioina PHP: ss\u00e4.<\/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>Seuraavaksi, jotta voimme luoda JWT: n <code>firebase\/php-jwt<\/code>paketin avulla, koodi on seuraava.<\/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>Lopuksi Zoom-kokouksen luomiseksi sen on l\u00e4hetett\u00e4v\u00e4 POST-pyynt\u00f6 p\u00e4\u00e4tepisteelle, <code>\/v2\/users\/me\/meetings<\/code>jossa JWT on <strong>kantotunnus<\/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>Luettelo Zoom-kokouksista<\/h3>\n<p>Haluat ehk\u00e4 listata kaikki Zoom-kokoukset sovelluksessasi. Zoom tarjoaa API: n, jonka kautta voimme saada luettelon kaikista Zoom-kokouksista. Alla olevan koodin avulla voit tulostaa Zoom-kokousten tiedot.<\/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>Tulostan t\u00e4\u00e4ll\u00e4 kokousten aiheita ja URL-osoitteita. Voit tulostaa my\u00f6s muita tietoja. Tulosta muuttuja <code>$data<\/code>saadaksesi luettelon k\u00e4ytett\u00e4viss\u00e4 olevista tiedoista.<\/p>\n<h3>Hanki aiemmat kokouksen osallistujat<\/h3>\n<p>Aikaisemmista kokouksista voit saada luettelon osallistujista Zoom-sovellusliittym\u00e4n avulla. Jos olet maksullisella tilill\u00e4, voit k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 erityist\u00e4 sovellusliittym\u00e4\u00e4. T\u00e4ll\u00e4 sovellusliittym\u00e4ll\u00e4 on oltava maksettu tili. Jos yrit\u00e4t soittaa t\u00e4h\u00e4n sovellusliittym\u00e4\u00e4n ilmaisella tilill\u00e4, saat virheilmoituksen.<\/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>Korvaa paikkamerkki MEETING_ID todellisella edellisen kokouksen tunnuksella. Vastauksessa saat osallistujien nimet ja s\u00e4hk\u00f6postit.<\/p>\n<h3>Poista Zoom Meeting JWT: n ja PHP: n avulla<\/h3>\n<p>Lis\u00e4\u00e4m\u00e4ll\u00e4 kokouksen luomisen Zoom tarjoaa my\u00f6s API-p\u00e4\u00e4tepisteet, kuten luettelon, p\u00e4ivityksen ja kokouksen poistamisen. K\u00e4ytt\u00e4j\u00e4n on noudatettava API-dokumentaatiotaan tietyn p\u00e4\u00e4tepisteen k\u00e4ytt\u00e4miseksi. Voit esimerkiksi <a href=\"https:\/\/marketplace.zoom.us\/docs\/api-reference\/zoom-api\/meetings\/meetingdelete\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">poistaa kokouksen<\/a> l\u00e4hett\u00e4m\u00e4ll\u00e4 POISTA-pyynn\u00f6n Zoom-sovellusliittym\u00e4n p\u00e4\u00e4tepisteeseen. Sinun on v\u00e4litett\u00e4v\u00e4 kokoustunnuksesi p\u00e4\u00e4tepisteeseen seuraavasti.<\/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>Toivon, ett\u00e4 sait tiet\u00e4\u00e4 Zoom-kokousten luomisesta PHP: n ja JWT: n kanssa. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/opas-hcaptcha-integraatiosta-php-hen\/\" title=\"Opas hCaptcha-integraatiosta PHP: hen\">Opas hCaptcha-integraatiosta PHP: hen<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kirjoita-tiedot-onedrive-taulukkoon-microsoft-graph-api-n-ja-php-n-avulla\/\" title=\"Kirjoita tiedot OneDrive-taulukkoon Microsoft Graph API: n ja PHP: n avulla\">Kirjoita tiedot OneDrive-taulukkoon Microsoft Graph API: n ja PHP: n avulla<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/puhe-tekstiksi-kayttamalla-amazon-transcriptia-php-ssa\/\" title=\"Puhe-tekstiksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Transcripti\u00e4 PHP: ss\u00e4\">Puhe-tekstiksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Transcripti\u00e4 PHP: ss\u00e4<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haluatko luoda zoomauskokouksia JWT: n ja PHP: n kanssa? JWT (JSON-verkkotunnukset) on OAuth-vaihtoehdon sijainen k\u00e4ytt\u00f6oikeustunnuksen luomiseksi. T\u00e4ss\u00e4<\/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":[275],"tags":[843],"class_list":["post-26063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/26063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=26063"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/26063\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/20149"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=26063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=26063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=26063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}