Hur man skapar ett möte med zoom med hjälp av Zoom API och PHP
Nyligen arbetade jag med ett projekt där jag behövde interagera med Zoom API. I klientens applikation implementerade vi många saker med hjälp av Zoom API som konton, fakturering, möten, grupper, rapporter, rum osv. Även om vi gjorde en hel del saker med hjälp av Zoom API, kommer jag i denna handledning att fokusera på hur man skapa ett möte med Zoom API och PHP.
Som vi alla vet är Zoom en plattform som används för telekonferenser, distansutbildning etc. Det är populärt bland människor för onlinekonferenser, möten, webbseminarier och andra saker.
De som letar efter att skapa ett möte via Zoom API måste välja antingen OAuth eller JWT för att interagera med sina API: er. OAuth och JWT (JSON web token) ger en hög säkerhetsnivå för att göra interaktioner med tredje parts tjänster. I denna handledning använder vi OAuth-processen och kommunicerar med Zoom API genom den.
Du kan också kontrollera självstudien Zoomintegration med JWT i PHP.
Skapa en OAuth-app i zoom
När du har ditt Zoom-konto måste du skapa en OAuth-app i Zoom med hjälp av nedanstående steg.
- Registrera din app på Zoom APP Marketplace.
- När du registrerar en app får du dina genererade referenser. Här måste du skicka URL för omdirigering för OAuth och vitlista URL.
- I nästa steg anger du grundläggande information om din app.
- På fliken kan du valfritt aktivera några ytterligare funktioner som händelsesprenumerationer och chattprenumerationer för din app.
- Under fliken "Omfattningar" måste du lägga till omfattningar angående din app. Du kan till exempel lägga till ett omfång för Zoom-möten.
Om du är på localhost använder du ngrok och genererar den lokala URL: en. I mitt fall är ngrok-webbadresser för OAuth-omdirigering och vitlista-URL enligt nedan.
Om du har problem med att skapa en OAuth-app hänvisar du till Zoom’s officiella dokumentation om Skapa en OAuth-app.
Grundläggande installation och konfiguration
Jag hittade inget PHP-bibliotek som kan användas för att interagera med Zoom API. Genom att göra lite forskning kan jag hantera det via Guzzle-biblioteket och Zoom REST API. Installera Guzzle-biblioteket med kommandot:
composer require guzzlehttp/guzzle
För att kunna interagera med Zoom REST API krävs att du skickar en åtkomsttoken. Vi kommer att generera det och lagra det i databasen. Åtkomsttoken är giltigt under en kort tidsperiod. I vår kod kommer vi att återskapa åtkomsttoken i bakgrunden så att användaren inte behöver göra auktoriseringsprocessen igen.
CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`access_token` text NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Eftersom vi kommer att behöva hämta tokenvärden från databasen måste vi skriva en kod för den. Skapa en fil class-db.php
och lägg till koden nedan i den.
klass-db.php
<?php
class DB {
private $dbHost = "DB_HOST";
private $dbUsername = "DB_USERNAME";
private $dbPassword = "DB_PASSWORD";
private $dbName = "DB_NAME";
public function __construct(){
if(!isset($this->db)){
// Connect to the database
$conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
if($conn->connect_error){
die("Failed to connect with MySQL: ". $conn->connect_error);
}else{
$this->db = $conn;
}
}
}
public function is_table_empty() {
$result = $this->db->query("SELECT id FROM token");
if($result->num_rows) {
return false;
}
return true;
}
public function get_access_token() {
$sql = $this->db->query("SELECT access_token FROM token");
$result = $sql->fetch_assoc();
return json_decode($result['access_token']);
}
public function get_refersh_token() {
$result = $this->get_access_token();
return $result->refresh_token;
}
public function update_access_token($token) {
if($this->is_table_empty()) {
$this->db->query("INSERT INTO token(access_token) VALUES('$token')");
} else {
$this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
}
}
}
Se till att ersätta platshållarna med dina faktiska databasuppgifter. Låt oss sedan skapa en åtkomsttoken genom OAuth-processen.
Skapa en åtkomsttoken
Användaren kan skapa en åtkomsttoken för sitt konto med hjälp av App-referenser och OAuth-processen. Skapa en config.php
fil, lagra appuppgifter och omdirigera URL i denna PHP-fil. Inkludera de andra miljöerna som DB-klass och leverantörsbibliotek också enligt följande.
config.php
<?php
require_once 'vendor/autoload.php';
require_once "class-db.php";
define('CLIENT_ID', 'YOUR_CLIENT_ID');
define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
define('REDIRECT_URI', 'REDIRECT_URL_FOR_OAUTH');
Ersätt platshållarna med dina appuppgifter och ställ in samma omdirigerings-URL som du lade till i appen Zoom OAuth. I mitt fall är omdirigerings-URL: en https://f2448150.ngrok.io/zoom/callback.php
. Det betyder i callback.php
filen att vi måste skriva koden som kallar ett Zoom API, begära åtkomsttoken och lagra den i databasen.
callback.php
<?php
require_once 'config.php';
try {
$client = new GuzzleHttpClient(['base_uri' => 'https://zoom.us']);
$response = $client->request('POST', '/oauth/token', [
"headers" => [
"Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
],
'form_params' => [
"grant_type" => "authorization_code",
"code" => $_GET['code'],
"redirect_uri" => REDIRECT_URI
],
]);
$token = json_decode($response->getBody()->getContents(), true);
$db = new DB();
if($db->is_table_empty()) {
$db->update_access_token(json_encode($token));
echo "Access token inserted successfully.";
}
} catch(Exception $e) {
echo $e->getMessage();
}
Låt oss nu skapa en auktoriserad URL där en användare kan klicka och slutföra auktoriseringsprocessen. Jag ska skapa den här webbadressen i index.php
filen.
index.php
<?php
require_once 'config.php';
$url = "https://zoom.us/oauth/authorize?response_type=code&client_id=".CLIENT_ID."&redirect_uri=".REDIRECT_URI;
?>
<a href="<?php echo $url; ?>">Login with Zoom</a>
Kör ovanstående fil i webbläsaren, klicka på länken ‘Logga in med zoom’ och slutför auktoriseringsprocessen. Vid framgångsrik autentisering bör du se ett framgångsmeddelande och åtkomsttoken lagras i din token
tabell. Om det fungerar kan vi gå vidare och skapa ett möte med Zoom API.
Skapa ett möte med zoom med hjälp av Zoom API
Zoom ger en slutpunkt för att skapa ett möte via deras REST API. Du kan läsa om det i deras dokumentation. Det kräver att du skickar en POST-begäran till den angivna slutpunkten tillsammans med de nödvändiga parametrarna.
API-slutpunkten kräver också att en åtkomsttoken ska skickas i behörighetshuvudet. Som jag sa tidigare har åtkomsttoken en kort livslängd och vi kommer att regenerera den i bakgrunden utan att be om autentiseringsprocessen igen.
Jag har skapat en create-meeting.php
fil för att skicka en POST-begäran till slutpunkten. Jag hanterade också villkoret för att token upphör att gälla och regenerera om det löpte ut.
skapa-möte.php
<?php
require_once 'config.php';
function create_meeting() {
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
try {
$response = $client->request('POST', '/v2/users/me/meetings', [
"headers" => [
"Authorization" => "Bearer $accessToken"
],
'json' => [
"topic" => "Let's learn Laravel",
"type" => 2,
"start_time" => "2021-03-05T20:30:00",
"duration" => "30", // 30 mins
"password" => "123456"
],
]);
$data = json_decode($response->getBody());
echo "Join URL: ". $data->join_url;
echo "<br>";
echo "Meeting Password: ". $data->password;
} catch(Exception $e) {
if( 401 == $e->getCode()) {
$refresh_token = $db->get_refersh_token();
$client = new GuzzleHttpClient(['base_uri' => 'https://zoom.us']);
$response = $client->request('POST', '/oauth/token', [
"headers" => [
"Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
],
'form_params' => [
"grant_type" => "refresh_token",
"refresh_token" => $refresh_token
],
]);
$db->update_access_token($response->getBody());
create_meeting();
} else {
echo $e->getMessage();
}
}
}
create_meeting();
Om du märkte koden har jag skickat "2021-03-20T20: 30: 00″ som en “starttid”. Det betyder att mötetiden är 20 mars 2021, 20:30. Användaren ska skicka formatet för det i åååå-MM-ddTHH: mm: ss. För "typ" -tangenten skickade jag värdet "2" som är för ett schemalagt möte. Användaren måste också ställa in ett möteslösenord som jag ställde till "123456".
Fortsätt och kör den här koden så ser du att ett möte skapas i ditt Zoom-konto.
Lista zoommöten
Vi har skrivit en kod för att skapa Zoom-möten. Med den här koden kan du skapa så många möten som du vill. Efter detta kanske du vill lista alla möten i din ansökan.
Zoom ger ett API genom vilket vi kan hämta alla våra Zoom-möten. Skapa en fil list-meeting.php
och använd koden nedan för att skriva ut alla möten.
list-meeting.php
<?php
require_once 'config.php';
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
$response = $client->request('GET', '/v2/users/me/meetings', [
"headers" => [
"Authorization" => "Bearer $accessToken"
]
]);
$data = json_decode($response->getBody());
if (!empty($data)) {
foreach ($data->meetings as $d) {
$topic = $d->topic;
$join_url = $d->join_url;
echo "<h3>Topic: $topic</h3>";
echo "Join URL: $join_url";
}
}
I ovanstående kod skriver jag ut ett ämne och en URL för möten. Du kan också skriva ut annan information. Skriv ut variabeln för $data
att få en lista med tillgänglig information.
Få deltagare i tidigare möten
När mötet är över kan du få en lista över deltagare med hjälp av Zoom API. Vi rekommenderar att du bara anropar detta API om du har ett betalt konto. Detta specifika API kräver ett betalt konto. Om du försöker ringa detta API med ett gratis konto får du ett fel.
<?php
require_once 'config.php';
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
$response = $client->request('GET', '/v2/past_meetings/MEETING_ID/participants', [
"headers" => [
"Authorization" => "Bearer $accessToken"
]
]);
$data = json_decode($response->getBody());
if (!empty($data)) {
foreach ($data->participants as $p) {
$name = $p->name;
$email = $p->user_email;
echo "Name: $name";
echo "Email: $email";
}
}
Byt ut platshållaren MEETING_ID med det faktiska ID-numret för tidigare möte. I svaret får du deltagarnas namn och e-postmeddelanden.
Radera ett möte
Användaren kan spela med Zoom API-slutpunkter som lista, uppdatera, radera ett möte. Allt du behöver göra är att följa deras riktlinjer för användning av specifika slutpunkter. Du kan till exempel ta bort ett möte genom att skicka en DELETE-begäran till API-slutpunkten. Till den här slutpunkten måste du skicka ditt mötes-ID enligt nedan.
<?php
require_once 'config.php';
$client = new GuzzleHttpClient(['base_uri' => 'https://api.zoom.us']);
$db = new DB();
$arr_token = $db->get_access_token();
$accessToken = $arr_token->access_token;
$response = $client->request('DELETE', '/v2/meetings/{meeting_id}', [
"headers" => [
"Authorization" => "Bearer $accessToken"
]
]);
if (204 == $response->getStatusCode()) {
echo "Meeting is deleted.";
}
Jag hoppas att du fick veta hur du skapar ett möte med Zoom API och PHP. Jag skulle vilja höra dina tankar och förslag i kommentarsektionen nedan.
relaterade artiklar
- Hur man använder YouTube API för att ladda upp video på YouTube-kanal
- Hur man använder Guzzle för att skicka HTTP-förfrågningar
- Skriv data till OneDrive-ark med Microsoft Graph API och PHP