Rev 6849 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Library;use \Firebase\JWT\JWT;use GuzzleHttp\Client;use Laminas\Db\Adapter\Adapter;use LeadersLinked\Model\ZoomMeeting;use LeadersLinked\Cache\CacheInterface;use LeadersLinked\Cache\CacheImpl;class Zoom{const CACHE_OAUTH_TOOKEN = 'zoom_oauth_tooken';/**** @var Adapter*/private $adapter;/**** @var array*/private $config;/**** @var CacheInterface*/private $cache;/**** @param Adapter $adapter* @param array config* @param CacheInterface $cache*/public function __construct($adapter, $config, $cache){$this->adapter = $adapter;$this->config = $config;$this->cache = $cache;}public function addMeeting($access_token, $topic, $agenda, $type, $start_time, $duration, $timezone, $password){$base_url = $this->config['leaderslinked.zoom.base_url'];$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,'settings' => ['participant_video'=> 'true','auto_recording' => 'true',]];} 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 ' . $access_token],'json' => $json,];$response = $client->request('POST', '/v2/users/me/meetings', $request );$statusCode = $response->getStatusCode() ;// error_log('$statusCode = ' . $statusCode);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()];}}public function getMeetings($access_token, $next_page_token){$base_url = $this->config['leaderslinked.zoom.base_url'];$client = new Client(['base_uri' => $base_url,]);$request = ['headers' => ['Authorization' => 'Bearer '. $access_token],'type' => 'scheduled'];if($next_page_token) {$request['query'] = ['next_page_token' => $next_page_token];}$response = $client->request('GET', '/v2/users/me/meetings', $request);$statusCode = $response->getStatusCode() ;if($statusCode >= 200 && $statusCode <= 300) {$meetings = json_decode($response->getBody()->getContents());return ['success' => true,'data' => $meetings];} else {return ['success' => false,'data' => $response->getStatusCode()];}}public function getOAuthAccessToken(){$data = $this->cache->get(self::CACHE_OAUTH_TOOKEN);if($data) {return ['success' => true,'data' => $data->accesstoken];}$account_id = $this->config['leaderslinked.zoom.account_id'];$client_id = $this->config['leaderslinked.zoom.client_id'];$client_secret = $this->config['leaderslinked.zoom.client_secret'];$client_token_base64_encode = base64_encode($client_id . ':' . $client_secret);$timecalled = time();$client = new Client(['base_uri' => 'https://zoom.us',]);$request = ['headers' => ['Authorization' => 'Basic ' . $client_token_base64_encode,'Accept' => 'application/json'],'form_params' => ['grant_type' => 'account_credentials','account_id' => $account_id],];$response = $client->request('POST', '/oauth/token', $request );$statusCode = $response->getStatusCode() ;if($statusCode >= 200 && $statusCode <= 300) {$response = json_decode($response->getBody()->getContents());$requiredscopes = ['meeting:read:admin','meeting:write:admin','user:read:admin',];$scopes = explode(' ', $response->scope);$missingscopes = array_diff($requiredscopes, $scopes);if (!empty($missingscopes)) {$missingscopes = implode(', ', $missingscopes);return ['success' => false,'data' => 'ERROR_OAUTH_MISSING_SCOPES ' . $missingscopes];}/*echo '<pre>';print_r($response);echo '</pre>';*/if (isset($response->expires_in)) {$expires = $response->expires_in + $timecalled;} else {$expires = 3599 + $timecalled;}$obj = new \stdClass();$obj->accesstoken = $response->access_token;$obj->expires = $expires;$obj->scopes = $scopes;$this->cache->add(self::CACHE_OAUTH_TOOKEN, $obj);return ['success' => true,'data' => $response->access_token];} else {return ['success' => false,'data' => $response->getStatusCode()];return $obj;}}}