Instalação

Para usar o SDK PHP, você pode fazer o download diretamente ou usar via Composer:

composer.json
{
    "require": {
        "guzzlehttp/guzzle": "^7.0"
    }
}
Terminal
composer install

Configuração

Crie a classe principal do SDK:

XtreamAPI.php
baseUrl = rtrim($baseUrl, '/');
        $this->username = $username;
        $this->password = $password;
        $this->client = new \GuzzleHttp\Client();
    }
    
    private function makeRequest($endpoint, $params = []) {
        $url = $this->baseUrl . $endpoint;
        
        try {
            $response = $this->client->get($url, [
                'query' => $params,
                'timeout' => 30,
                'verify' => false
            ]);
            
            $body = $response->getBody()->getContents();
            return json_decode($body, true);
        } catch (\Exception $e) {
            throw new Exception('Erro na requisição: ' . $e->getMessage());
        }
    }
    
    private function makePostRequest($endpoint, $data = []) {
        $url = $this->baseUrl . $endpoint;
        
        try {
            $response = $this->client->post($url, [
                'form_params' => $data,
                'timeout' => 30,
                'verify' => false
            ]);
            
            $body = $response->getBody()->getContents();
            return json_decode($body, true);
        } catch (\Exception $e) {
            throw new Exception('Erro na requisição: ' . $e->getMessage());
        }
    }
}

Autenticação

Métodos para autenticação e verificação de credenciais:

Métodos de Autenticação
public function authenticate($username, $password) {
    $params = [
        'username' => $username,
        'password' => $password
    ];
    
    $response = $this->makeRequest('/player_api.php', $params);
    
    if (isset($response['user_info'])) {
        $this->username = $username;
        $this->password = $password;
        return $response;
    }
    
    throw new Exception('Credenciais inválidas');
}

public function getUserInfo() {
    if (!$this->username || !$this->password) {
        throw new Exception('Usuário não autenticado');
    }
    
    $params = [
        'username' => $this->username,
        'password' => $this->password
    ];
    
    return $this->makeRequest('/player_api.php', $params);
}

public function panelLogin($username, $password) {
    $data = [
        'username' => $username,
        'password' => $password
    ];
    
    $response = $this->makePostRequest('/api.php?action=login', $data);
    
    if (isset($response['status']) && $response['status'] == 'success') {
        return $response['token'];
    }
    
    throw new Exception('Login no painel falhou');
}

Gerenciamento de Usuários

Métodos para criar, editar e gerenciar usuários:

Métodos de Usuários
public function createUser($token, $userData) {
    $data = array_merge([
        'action' => 'user',
        'sub' => 'create',
        'token' => $token
    ], $userData);
    
    return $this->makePostRequest('/api.php', $data);
}

public function editUser($token, $userId, $userData) {
    $data = array_merge([
        'action' => 'user',
        'sub' => 'edit',
        'user_id' => $userId,
        'token' => $token
    ], $userData);
    
    return $this->makePostRequest('/api.php', $data);
}

public function deleteUser($token, $userId) {
    $data = [
        'action' => 'user',
        'sub' => 'delete',
        'user_id' => $userId,
        'token' => $token
    ];
    
    return $this->makePostRequest('/api.php', $data);
}

public function getUserDetails($token, $userId) {
    $params = [
        'action' => 'user',
        'sub' => 'info',
        'user_id' => $userId,
        'token' => $token
    ];
    
    return $this->makeRequest('/api.php', $params);
}

public function getAllUsers($token) {
    $params = [
        'action' => 'user',
        'sub' => 'list',
        'token' => $token
    ];
    
    return $this->makeRequest('/api.php', $params);
}

Canais e Conteúdo

Métodos para gerenciar canais, VOD e séries:

Métodos de Conteúdo
public function getLiveStreams() {
    $params = [
        'username' => $this->username,
        'password' => $this->password,
        'action' => 'get_live_streams'
    ];
    
    return $this->makeRequest('/player_api.php', $params);
}

public function getVodStreams() {
    $params = [
        'username' => $this->username,
        'password' => $this->password,
        'action' => 'get_vod_streams'
    ];
    
    return $this->makeRequest('/player_api.php', $params);
}

public function getSeries() {
    $params = [
        'username' => $this->username,
        'password' => $this->password,
        'action' => 'get_series'
    ];
    
    return $this->makeRequest('/player_api.php', $params);
}

public function getStreamInfo($streamId, $type = 'live') {
    $params = [
        'username' => $this->username,
        'password' => $this->password,
        'action' => 'get_' . $type . '_info',
        'stream_id' => $streamId
    ];
    
    return $this->makeRequest('/player_api.php', $params);
}

public function getCategories($type = 'live') {
    $params = [
        'username' => $this->username,
        'password' => $this->password,
        'action' => 'get_live_categories'
    ];
    
    if ($type === 'vod') {
        $params['action'] = 'get_vod_categories';
    } elseif ($type === 'series') {
        $params['action'] = 'get_series_categories';
    }
    
    return $this->makeRequest('/player_api.php', $params);
}

Relatórios

Métodos para gerar relatórios e estatísticas:

Métodos de Relatórios
public function getServerStats($token) {
    $params = [
        'action' => 'server_stats',
        'token' => $token
    ];
    
    return $this->makeRequest('/api.php', $params);
}

public function getUserConnections($token, $userId = null) {
    $params = [
        'action' => 'user_activity',
        'token' => $token
    ];
    
    if ($userId) {
        $params['user_id'] = $userId;
    }
    
    return $this->makeRequest('/api.php', $params);
}

public function getStreamStats($token, $streamId, $type = 'live') {
    $params = [
        'action' => 'stream_stats',
        'token' => $token,
        'stream_id' => $streamId,
        'type' => $type
    ];
    
    return $this->makeRequest('/api.php', $params);
}

Tratamento de Erros

Exemplo completo de uso com tratamento de erros:

exemplo_completo.php
authenticate('usuario_teste', 'senha123');
    echo "Usuário autenticado: " . $userAuth['user_info']['username'] . "\n";
    
    // Login no painel
    $token = $api->panelLogin('admin', 'admin_password');
    echo "Token do painel: " . $token . "\n";
    
    // Criar novo usuário
    $novoUsuario = [
        'username' => 'novo_usuario_' . time(),
        'password' => 'senha_forte_123',
        'email' => 'usuario@email.com',
        'exp_date' => date('Y-m-d', strtotime('+30 days')),
        'max_connections' => 2,
        'is_trial' => 0,
        'enabled' => 1
    ];
    
    $resultado = $api->createUser($token, $novoUsuario);
    
    if ($resultado['status'] === 'success') {
        echo "Usuário criado com sucesso! ID: " . $resultado['user_id'] . "\n";
        
        // Obter informações do usuário criado
        $infoUsuario = $api->getUserDetails($token, $resultado['user_id']);
        echo "Detalhes do usuário: " . json_encode($infoUsuario, JSON_PRETTY_PRINT) . "\n";
        
        // Listar canais disponíveis
        $canais = $api->getLiveStreams();
        echo "Total de canais: " . count($canais) . "\n";
        
        // Obter estatísticas do servidor
        $stats = $api->getServerStats($token);
        echo "Usuários online: " . $stats['total_users_online'] . "\n";
        
    } else {
        echo "Erro ao criar usuário: " . $resultado['message'] . "\n";
    }
    
} catch (Exception $e) {
    echo "Erro: " . $e->getMessage() . "\n";
    
    // Log do erro
    error_log("Erro SDK Xtream: " . $e->getMessage() . " - " . date('Y-m-d H:i:s'));
}
Dica: Sempre trate as exceções adequadamente e implemente logs para facilitar a depuração em produção.