Rev 5837 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Library;
use \Firebase\JWT\JWT;
use GuzzleHttp\Client;
use Laminas\Db\Adapter\Adapter;
use LeadersLinked\Model\ZoomMeeting;
class Zoom
{
/**
*
* @var Adapter
*/
private $adapter;
/**
*
* @var array
*/
private $config;
/**
*
* @param Adapter $adapter
* @param array config
*/
public function __construct($adapter, $config)
{
$this->adapter = $adapter;
$this->config = $config;
}
public function add($topic, $agenda, $type, $start_time, $duration, $timezone, $password)
{
$base_url = $this->config['leaderslinked.zoom.base_url'];
$token = $this->getAccessToken();
$client = new Client([
'base_uri' => $base_url,
]);
if($type == ZoomMeeting::TYPE_SCHEDULED) {
$json = [
'topic' => $topic,
'agenda' => $agenda,
'type' => 2,
'start_time' => $start_time,
'duration' => $duration,
'password' => $password,
'timezone' => $timezone,
];
} else {
$json = [
'topic' => $topic,
'agenda' => $agenda,
'type' => 1,
'duration' => $duration,
'password' => $password,
'timezone' => $timezone,
'settings' => [
'participant_video'=> 'true',
'auto_recording' => 'none',
]
];
}
$request = [
'headers' => [
'Authorization' => 'Bearer ' . $token
],
'json' => $json,
];
$response = $client->request('POST', '/v2/users/me/meetings', $request );
$statusCode = $response->getStatusCode() ;
if($statusCode >= 200 && $statusCode <= 300) {
$data = json_decode($response->getBody()->getContents());
return [
'success' => true,
'data' => [
'id' => $data->id,
'uuid' => $data->uuid,
'join_url' => $data->join_url,
'password' => $data->password,
]
];
} else {
return [
'success' => false,
'data' => $response->getStatusCode()
];
}
}
private function getAccessToken() {
$api_key = $this->config['leaderslinked.zoom.api_key'];
$api_secret = $this->config['leaderslinked.zoom.api_secret'];
$payload =[
'iss' => $api_key,
'exp' => time() + 3600,
];
return JWT::encode($payload, $api_secret, 'HS256');
}
}