Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4131 | Rev 6749 | 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,
                '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 ' . $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()
            ]; 
        }
            
       
        
    }
    
    
    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');
    }
    
    
}