# Cosmo VPN Panel — PHP SDK

PHP-клиент для [Seller API](https://github.com/cosmo-vpn/cosmo-panel) панели Cosmo VPN.

Требования: **PHP 7.4+**, расширения `curl`, `json`, `mbstring`.

## Установка

### Через Composer

```bash
composer require cosmo-panel/sdk
```

### Вручную

```php
require_once 'path/to/sdk/php/src/Client.php';
```

## Быстрый старт

```php
<?php

require 'vendor/autoload.php';

use CosmoPanel\Client;
use CosmoPanel\CosmoException;
use CosmoPanel\CosmoRequestException;

$client = new Client(
    'wgp_your_api_key_here',
    'http://163.5.153.53:8000'
);

// Создаём ключ
$key = $client->createKey([
    'name'       => 'Иван Петров',
    'days'       => 30,
    'traffic_gb' => 50,
    'email'      => 'ivan@example.com',
]);
echo "Создан ключ: {$key['id']}\n";

// Список ключей
$keys = $client->listKeys();
foreach ($keys['items'] ?? [] as $k) {
    echo "  {$k['id']}: {$k['name']}\n";
}

// Детали
$info = $client->getKey($key['id']);
echo "Статус: {$info['status']}\n";

// Продлить
$client->extendKey($key['id'], ['days' => 30]);

// Добавить трафик
$client->addTraffic($key['id'], ['gb' => 10]);

// Приостановить / активировать
$client->suspendKey($key['id']);
$client->activateKey($key['id']);

// Изменить параметры
$client->updateKey($key['id'], [
    'name'        => 'Пётр Иванов',
    'max_devices' => 3,
]);

// Функции
$client->updateKeyFeatures($key['id'], [
    'obfuscation' => true,
    'adblock'     => true,
]);

// Скачать конфиг
$config = $client->getKeyConfig($key['id']);
file_put_contents('vpn.conf', $config);

// Удалить
$client->deleteKey($key['id']);
```

## Обработка ошибок

```php
<?php

use CosmoPanel\Client;
use CosmoPanel\CosmoException;
use CosmoPanel\CosmoRequestException;

$client = new Client('wgp_...', 'http://163.5.153.53:8000');

try {
    $key = $client->createKey(['name' => 'Тест', 'days' => 30, 'traffic_gb' => 10]);
    echo "Создан: {$key['id']}\n";
} catch (CosmoRequestException $e) {
    echo "Ошибка сети: {$e->getMessage()}\n";
} catch (CosmoException $e) {
    echo "Ошибка API ({$e->getStatusCode()}): {$e->getMessage()}\n";
}
```

## Настройка

```php
$client = new Client(
    'wgp_...',                         // API-ключ
    'http://163.5.153.53:8000',        // Базовый URL
    60.0,                               // Таймаут (сек)
    5                                   // Максимум повторных попыток
);
```

## Все методы

| Метод | HTTP | Эндпоинт | Описание |
|-------|------|----------|----------|
| `createKey([...])` | POST | `/api/v1/keys` | Создать ключ |
| `listKeys([...])` | GET | `/api/v1/keys` | Список ключей |
| `getKey($id)` | GET | `/api/v1/keys/{id}` | Детали ключа |
| `getKeyConfig($id)` | GET | `/api/v1/keys/{id}/config` | Скачать конфиг |
| `extendKey($id, [...])` | POST | `/api/v1/keys/{id}/extend` | Продлить ключ |
| `addTraffic($id, [...])` | POST | `/api/v1/keys/{id}/traffic` | Добавить трафик |
| `suspendKey($id)` | POST | `/api/v1/keys/{id}/suspend` | Приостановить |
| `activateKey($id)` | POST | `/api/v1/keys/{id}/activate` | Активировать |
| `updateKey($id, [...])` | PATCH | `/api/v1/keys/{id}` | Изменить параметры |
| `updateKeyFeatures($id, [...])` | PATCH | `/api/v1/keys/{id}/features` | Изменить функции |
| `deleteKey($id)` | DELETE | `/api/v1/keys/{id}` | Удалить ключ |

## Лицензия

MIT
