API Документация
Система поощрения за голосование на MMORating.top
Обзор
Наш API позволяет администраторам игровых серверов интегрировать систему поощрения за голосование на нашем топе. Игроки, проголосовавшие за ваш сервер, могут получить награду на вашем сайте.
https://www.mmorating.top/api/v1
- По имени персонажа - если вы выдаете награды по нику персонажа в игре
- По email - если у вас есть регистрация с email, работает для мобильных пользователей
- По user_id - если вы интегрируете с системой аккаунтов mmorating.top
- По IP (legacy) - только если текущая система уже работает и вас устраивает
Получение API ключа
- Войдите в свой аккаунт на mmorating.top
- Перейдите в раздел "Мои сервера"
- Найдите ваш сервер (должен быть одобрен администрацией)
- В разделе "API для поощрения за голосование" нажмите "Создать API ключ"
- Скопируйте полученный API ключ (он начинается с
mmr_)
API Endpoints
POST
/api/v1/vote/check
(Legacy - для обратной совместимости)
Проверяет, голосовал ли указанный IP адрес за ваш сервер сегодня. Рекомендуется использовать новый гибкий метод ниже.
Параметры запроса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
api_key |
string | Да | Ваш API ключ |
ip_address |
string (IP) | Да | IP адрес игрока, для которого проверяется голосование |
Пример запроса (cURL):
curl -X POST "https://www.mmorating.top/api/v1/vote/check" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"api_key": "mmr_your_api_key_here",
"ip_address": "192.168.1.1"
}'
Пример запроса (PHP):
$apiKey = 'mmr_your_api_key_here';
$ipAddress = $_SERVER['REMOTE_ADDR']; // IP адрес игрока
$data = [
'api_key' => $apiKey,
'ip_address' => $ipAddress
];
$ch = curl_init('https://www.mmorating.top/api/v1/vote/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($response, true);
if ($result['success'] && $result['has_voted']) {
// Игрок проголосовал - выдайте награду
echo "Игрок проголосовал! Выдайте награду.";
} else {
// Игрок не голосовал сегодня
echo "Игрок еще не голосовал сегодня.";
}
Пример ответа (успех):
{
"success": true,
"has_voted": true,
"server_id": 1,
"server_name": "Название сервера",
"checked_at": "2026-02-05T12:00:00+00:00"
}
Пример ответа (не голосовал):
{
"success": true,
"has_voted": false,
"server_id": 1,
"server_name": "Название сервера",
"checked_at": "2026-02-05T12:00:00+00:00"
}
Пример ответа (ошибка):
{
"success": false,
"error": "Invalid API key"
}
GET
/api/v1/server/info
Получает информацию о сервере по API ключу.
Параметры запроса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
api_key |
string | Да | Ваш API ключ |
Пример запроса:
curl -X GET "https://www.mmorating.top/api/v1/server/info?api_key=mmr_your_api_key_here" \
-H "Accept: application/json"
Пример ответа:
{
"success": true,
"server": {
"id": 1,
"name": "Название сервера",
"game_type": "l2",
"website": "https://example.com",
"worlds": [
{
"id": 1,
"name": "Название мира",
"type": "pvp",
"version": "Interlude"
}
]
}
}
POST
/api/v1/vote/check-flexible
(Рекомендуется)
Гибкий метод проверки голосования. Поддерживает проверку по имени персонажа, ID пользователя, email или IP адресу. Идеально подходит для серверов, которые выдают награды по нику персонажа, и для мобильных пользователей.
Параметры запроса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
api_key |
string | Да | Ваш API ключ |
character_name |
string | Нет* | Имя персонажа игрока (для серверов с наградой по нику) |
user_id |
integer | Нет* | ID пользователя на mmorating.top |
email |
string (email) | Нет* | Email адрес пользователя |
ip_address |
string (IP) | Нет* | IP адрес игрока (для обратной совместимости) |
* Должен быть указан хотя бы один из параметров: character_name, user_id, email или ip_address
** Если указано несколько параметров, все они должны совпадать (логика AND). Например, если указаны character_name и email, система найдет голос только если оба параметра совпадают.
Пример запроса (по имени персонажа):
curl -X POST "https://www.mmorating.top/api/v1/vote/check-flexible" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"api_key": "mmr_your_api_key_here",
"character_name": "PlayerName"
}'
Пример запроса (по email):
curl -X POST "https://www.mmorating.top/api/v1/vote/check-flexible" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"api_key": "mmr_your_api_key_here",
"email": "player@example.com"
}'
Пример запроса (комбинированная проверка):
curl -X POST "https://www.mmorating.top/api/v1/vote/check-flexible" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"api_key": "mmr_your_api_key_here",
"character_name": "PlayerName",
"email": "player@example.com"
}'
Пример ответа (успех - голосовал):
{
"success": true,
"has_voted": true,
"server_id": 1,
"server_name": "Название сервера",
"checked_at": "2026-02-05T12:00:00+00:00",
"checked_by": ["character_name", "email"],
"vote_info": {
"voted_at": "2026-02-05T10:30:00+00:00",
"character_name": "PlayerName",
"vote_type": "normal"
}
}
Пример ответа (не голосовал):
{
"success": true,
"has_voted": false,
"server_id": 1,
"server_name": "Название сервера",
"checked_at": "2026-02-05T12:00:00+00:00",
"checked_by": ["character_name"],
"vote_info": null
}
Пример интеграции PHP (по имени персонажа):
<?php
// config.php
define('MMORATING_API_KEY', 'mmr_your_api_key_here');
define('MMORATING_API_URL', 'https://www.mmorating.top/api/v1/vote/check-flexible');
// vote_check.php
function checkVoteOnMMORating($characterName) {
$data = [
'api_key' => MMORATING_API_KEY,
'character_name' => $characterName
];
$ch = curl_init(MMORATING_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return false;
}
$result = json_decode($response, true);
return isset($result['success']) && $result['success'] && $result['has_voted'];
}
// Использование в игре
$playerName = $_GET['player_name']; // Имя персонажа из игры
if (checkVoteOnMMORating($playerName)) {
// Игрок проголосовал - выдайте награду по имени персонажа
giveRewardToPlayer($playerName);
echo "Спасибо за голос! Награда выдана.";
} else {
echo "Пожалуйста, проголосуйте за наш сервер на https://mmorating.top";
}
?>
Пример интеграции PHP (по email):
<?php
function checkVoteByEmail($email) {
$data = [
'api_key' => MMORATING_API_KEY,
'email' => $email
];
$ch = curl_init(MMORATING_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return false;
}
$result = json_decode($response, true);
return isset($result['success']) && $result['success'] && $result['has_voted'];
}
// Использование
$userEmail = $_SESSION['user_email']; // Email из вашей системы
if (checkVoteByEmail($userEmail)) {
giveRewardToUser($userEmail);
}
?>
Важные замечания
- Рекомендуемый метод: Используйте
/api/v1/vote/check-flexibleдля новых интеграций. Он поддерживает проверку по имени персонажа, email, user_id или IP адресу. - Проверка по имени персонажа: Идеально подходит для серверов, которые выдают награды по нику персонажа. Имя персонажа должно точно совпадать с тем, что указал игрок при голосовании.
- Проверка по email: Подходит для систем, где игроки регистрируются с email. Работает даже если игрок голосует с мобильного устройства.
- Проверка по IP (legacy): Старый метод
/api/v1/vote/checkработает только по IP адресу. Может быть неудобен для мобильных пользователей, так как IP может меняться. - Комбинированная проверка: Можно указать несколько параметров одновременно (например, character_name и email). Система найдет голос, если хотя бы один параметр совпадает.
- Время обновления: Возможность голосовать обновляется каждый день в 00:01 по серверному времени.
- Безопасность: Никогда не передавайте API ключ на клиентскую сторону. Все запросы должны выполняться с вашего сервера.
- Rate Limiting: Рекомендуется кэшировать результаты проверки на вашей стороне, чтобы не делать лишние запросы.
- Обратная совместимость: Старый метод
/api/v1/vote/checkпродолжает работать для существующих интеграций. Нет необходимости обновлять код, если текущая система работает нормально. - Ошибки: При ошибке API возвращает HTTP статус 400/401 и JSON с полем
error.
Примеры интеграции
Пример 1: Проверка по имени персонажа (рекомендуется)
<?php
// config.php
define('MMORATING_API_KEY', 'mmr_your_api_key_here');
define('MMORATING_API_URL', 'https://www.mmorating.top/api/v1/vote/check-flexible');
// vote_check.php
function checkVoteByCharacterName($characterName) {
$data = [
'api_key' => MMORATING_API_KEY,
'character_name' => $characterName
];
$ch = curl_init(MMORATING_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return false;
}
$result = json_decode($response, true);
return isset($result['success']) && $result['success'] && $result['has_voted'];
}
// Использование в игре
$playerName = $_GET['player_name']; // Имя персонажа из игры
if (checkVoteByCharacterName($playerName)) {
// Игрок проголосовал - выдайте награду по имени персонажа
giveRewardToPlayer($playerName);
echo "Спасибо за голос! Награда выдана.";
} else {
echo "Пожалуйста, проголосуйте за наш сервер на https://mmorating.top";
}
?>
Пример 2: Проверка по IP (legacy - для обратной совместимости)
<?php
// config.php
define('MMORATING_API_KEY', 'mmr_your_api_key_here');
define('MMORATING_API_URL', 'https://www.mmorating.top/api/v1/vote/check');
// vote_check.php
function checkVoteOnMMORating($playerIp) {
$data = [
'api_key' => MMORATING_API_KEY,
'ip_address' => $playerIp
];
$ch = curl_init(MMORATING_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return false;
}
$result = json_decode($response, true);
return isset($result['success']) && $result['success'] && $result['has_voted'];
}
// Использование
$playerIp = $_SERVER['REMOTE_ADDR'];
if (checkVoteOnMMORating($playerIp)) {
giveRewardToPlayer($playerName);
echo "Спасибо за голос! Награда выдана.";
} else {
echo "Пожалуйста, проголосуйте за наш сервер на https://mmorating.top";
}
?>
<?php
// config.php
define('MMORATING_API_KEY', 'mmr_your_api_key_here');
define('MMORATING_API_URL', 'https://www.mmorating.top/api/v1/vote/check-flexible');
// vote_check.php
function checkVoteByCharacterName($characterName) {
$data = [
'api_key' => MMORATING_API_KEY,
'character_name' => $characterName
];
$ch = curl_init(MMORATING_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return false;
}
$result = json_decode($response, true);
return isset($result['success']) && $result['success'] && $result['has_voted'];
}
// Использование в игре
$playerName = $_GET['player_name']; // Имя персонажа из игры
if (checkVoteByCharacterName($playerName)) {
// Игрок проголосовал - выдайте награду по имени персонажа
giveRewardToPlayer($playerName);
echo "Спасибо за голос! Награда выдана.";
} else {
echo "Пожалуйста, проголосуйте за наш сервер на https://mmorating.top";
}
?><?php
// config.php
define('MMORATING_API_KEY', 'mmr_your_api_key_here');
define('MMORATING_API_URL', 'https://www.mmorating.top/api/v1/vote/check');
// vote_check.php
function checkVoteOnMMORating($playerIp) {
$data = [
'api_key' => MMORATING_API_KEY,
'ip_address' => $playerIp
];
$ch = curl_init(MMORATING_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
return false;
}
$result = json_decode($response, true);
return isset($result['success']) && $result['success'] && $result['has_voted'];
}
// Использование
$playerIp = $_SERVER['REMOTE_ADDR'];
if (checkVoteOnMMORating($playerIp)) {
giveRewardToPlayer($playerName);
echo "Спасибо за голос! Награда выдана.";
} else {
echo "Пожалуйста, проголосуйте за наш сервер на https://mmorating.top";
}
?>
Поддержка
Если у вас возникли вопросы по использованию API, свяжитесь с нами через форму обратной связи или напишите на email администрации.