API Документация

Интегрируйте систему голосования MMOGTOP.GG в ваш проект. Наше API позволяет проверять голоса игроков и автоматически начислять награды.

Основная информация

Базовый URL API: https://mmogtop.gg/api/v1

Для доступа к API требуется токен, который вы можете получить в панели управления вашим сервером.

Endpoints

Универсальный endpoint для работы с голосами

GET /votes/by-token

Этот endpoint объединяет функциональность проверки голоса и получения списка голосов. Использует токен сервера для авторизации.

Параметры запроса:

  • server_token - Ваш токен сервера (обязательно)
  • character - Имя персонажа (опционально). Если передан - проверяет конкретный голос
  • period - Период для фильтрации (today, yesterday, week, month, all). По умолчанию: all
  • page - Номер страницы для пагинации. По умолчанию: 1
  • per_page - Количество записей на страницу (максимум 100). По умолчанию: 50

Логика работы:

  • Если передан параметр character - возвращает информацию о голосе этого персонажа за сегодня
  • Если character не передан - возвращает список всех голосов с возможностью фильтрации по периоду

Получение списка голосов (для владельцев)

GET /servers/{server}/votes

Этот endpoint требует аутентификации через Sanctum и доступен только владельцу сервера или администратору.

Параметры запроса:

  • period - Период для фильтрации (today, yesterday, week, month, all). По умолчанию: today
  • page - Номер страницы для пагинации. По умолчанию: 1
  • per_page - Количество записей на страницу (максимум 100). По умолчанию: 50

Пример ответа:

{
    "data": [
        {
            "id": 123,
            "user_id": 456,
            "server_id": 789,
            "character_name": "PlayerName",
            "voted_at": "2024-01-20T15:30:00Z"
        },
        // ...другие голоса
    ],
    "meta": {
        "current_page": 1,
        "last_page": 5,
        "per_page": 50,
        "total": 250
    }
}

Примеры интеграции

Проверка голоса персонажа (PHP)

$token = 'ваш_токен';
$character = 'имя_персонажа';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://mmogtop.gg/api/v1/votes/by-token?server_token={$token}&character={$character}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if ($data['success']) {
    // Игрок проголосовал
    $votedAt = $data['voted_at'];
    // Начислить награду
}

Проверка голоса персонажа (JavaScript)

const checkVote = async (token, character) => {
    try {
const response = await fetch(`https://mmogtop.gg/api/v1/votes/by-token?server_token=${token}&character=${character}`);
        const data = await response.json();

        if (data.success) {
            // Игрок проголосовал
            console.log('Voted at:', data.voted_at);
            // Начислить награду
        }
    } catch (error) {
        console.error('Error checking vote:', error);
    }
};

Проверка голоса персонажа (Laravel)

use Illuminate\Support\Facades\Http;

public function checkVote(string $character)
{
    try {
$response = Http::get('https://mmogtop.gg/api/v1/votes/by-token', [
            'server_token' => config('services.mmoanons.server_token'),
            'character' => $character,
        ]);

        if ($response->successful() && $response->json('success')) {
            // Игрок проголосовал
            $votedAt = $response->json('voted_at');
            // Начислить награду
            return true;
        }

        return false;
    } catch (\Exception $e) {
        Log::error('Vote check failed: ' . $e->getMessage());
        return false;
    }
}

Получение списка голосов по токену (Laravel)

use Illuminate\Support\Facades\Http;

public function getVotesByToken(string $period = 'today')
{
    try {
$response = Http::get('https://mmogtop.gg/api/v1/votes/by-token', [
            'server_token' => config('services.mmoanons.server_token'),
            'period' => $period,
            'page' => 1,
            'per_page' => 50,
        ]);

        if ($response->successful() && $response->json('success')) {
            $votes = $response->json('data');
            $meta = $response->json('meta');
            
            // Обработка списка голосов
            foreach ($votes as $vote) {
                $characterName = $vote['character_name'];
                $votedAt = $vote['voted_at'];
                // Начислить награду, если еще не начислена
            }
            
            return [
                'votes' => $votes,
                'meta' => $meta
            ];
        }

        return [];
    } catch (\Exception $e) {
        Log::error('Get votes by token failed: ' . $e->getMessage());
        return [];
    }
}

Получение списка голосов (для владельцев)

use Illuminate\Support\Facades\Http;

public function getVotes(string $period = 'today')
{
    try {
        $response = Http::withToken('ваш_api_токен')
->get('https://mmogtop.gg/api/v1/servers/{server_id}/votes', [
                'period' => $period,
                'page' => 1,
                'per_page' => 50,
            ]);

        if ($response->successful()) {
            $votes = $response->json('data');
            // Обработка списка голосов
            foreach ($votes as $vote) {
                // Обработка каждого голоса
                $characterName = $vote['character_name'];
                $votedAt = $vote['voted_at'];
                // Начислить награду, если еще не начислена
            }
            return $votes;
        }

        return [];
    } catch (\Exception $e) {
        Log::error('Get votes failed: ' . $e->getMessage());
        return [];
    }
}

Ответ API

Проверка голоса персонажа

Успешный ответ:

{
    "success": true,
    "voted_at": "2024-01-20T15:30:00Z",
    "character": "PlayerName",
    "server_id": 123
}

Ответ при отсутствии голоса:

{
    "success": false,
    "message": "No vote found for this character"
}

Получение списка голосов

Успешный ответ:

{
    "success": true,
    "data": [
        {
            "id": 123,
            "user_id": 456,
            "server_id": 789,
            "character_name": "PlayerName",
            "server_name": "Baza",
            "voted_at": "2024-01-20T15:30:00Z",
            "created_at": "2024-01-20T15:30:00Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 5,
        "per_page": 50,
        "total": 250,
        "server_info": {
            "id": 789,
            "name": "Baza",
            "game": "World of Warcraft"
        }
    }
}

Рекомендации по интеграции

  • Проверяйте голоса не чаще чем раз в минуту
  • Храните информацию о начисленных наградах
  • Обрабатывайте ошибки сети и недоступность API
  • Используйте SSL для безопасных запросов
  • Для автоматизации начисления наград рекомендуется использовать endpoint получения списка голосов

Автоматизация начисления наград

Для автоматического начисления наград игрокам, проголосовавшим за ваш сервер, рекомендуем следующий подход:

  • Создайте задачу по расписанию (cron job), которая будет выполняться каждые 5-15 минут
  • В этой задаче запрашивайте список голосов за текущий день через API
  • Сравнивайте полученные голоса с вашей базой уже обработанных голосов
  • Для новых голосов начисляйте награды и сохраняйте информацию о начислении

Такой подход позволит автоматически обрабатывать голоса даже если игрок не заходит на сервер сразу после голосования.

Support

Если у вас возникли вопросы по интеграции API, обратитесь в нашу службу поддержки.