Для Minecraft спочатку використовуй Votifier. HTTP postback — опційно (або додатково). Кожен увімкнений канал працює незалежно після голосу.
Швидкий старт
1Увійди й відкрий панель.
2Відредагуй схвалений запис сервера.
3Вкажи URL postback і/або увімкни Votifier в Деталях Minecraft.
4Скопіюй посилання для мотиваційного голосування з форми редагування (закінчується на ?p=USERNAME).
5Розмісти це посилання на сайті або в Discord; замінюй USERNAME для кожного гравця.
6Віддай тестовий голос і переконайся, що нагорода приходить.
02
Postback PHP
Після успішного голосу ми запитуємо твій URL із параметром гравця та його IP. Твій скрипт позначає акаунт як такого, що проголосував, і видає очки або предмети.
Додай публічну вихідну IP цього сайту в allowlist файрвола й скрипта postback. Відхиляй усі інші джерела. Краще HTTPS.
1. Вкажи URL postback
Панель → Редагувати сервер → Нагороди за голоси → URL postback.
https://YOURDOMAIN/postback.php
Назва файлу довільна — використай шлях, зручний для твого стеку.
Приймаються лише публічні URL http/https. Localhost, приватні LAN IP і URL з обліковими даними відхиляються (захист від SSRF).
Ми йдемо за невеликою кількістю редиректів і обриваємо запит через кілька секунд, щоб голосування лишалося швидким.
2. Збери посилання для мотиваційного голосування
Додай параметр, щоб кожного гравця було видно, коли він потрапляє на сторінку голосування.
/GAME/server/SLUG/vote?p=PARAMETER
Елемент
Правила
PARAMETER / p_resp
Лише літери, цифри, _, - · макс. 32 символи · нікнейм, ID акаунта або будь-який ID, який ти відстежуєш
ip
IPv4 або IPv6 голосуючого, як бачить цей список (з урахуванням проксі, якщо увімкнено)
Попереднє заповнення
?p= або ?username=
3. Що ми викликаємо після голосу
Лише після успіху. Якщо гравець не віддав валідний голос, запит не надсилаємо.
Коли ми б'ємо в твій postback з p_resp=Razor, гравець Razor проголосував. Значення ip — адреса, яку він використав у цьому списку.
Що має робити твій скрипт
Перевір, що запит іде з публічної IP цього списку.
Очисти p_resp і ip (ніколи не довіряй сирому вводу).
Підтверди, що акаунт / персонаж існує в твоїй базі.
Застосуй власний кулдаун нагород, якщо потрібен жорсткіший за 24 години.
Видай очки, монети чи предмети; залоговай подію; поверни HTTP 200.
Приклад postback.php
Хости це на своєму сайті нагород, не обов'язково на цьому списку голосів. Перед продом задай VOTE_LIST_IP на вихідну публічну IP цього сайту.
<?php
/**
* Example vote postback receiver for YOUR game website / CMS.
*
* Configure this URL on your listing under Dashboard → Edit server → Vote Rewards.
* This list will call it ONLY after a successful vote:
*
* https://yoursite.com/postback.php?p_resp=PARAMETER&ip=USERIP
*
* PARAMETER is the username / account id the player entered on the vote form
* (or the value from ?p= on your incentive voting link).
*
* Docs: /voting-check
*/
define('DEBUG', 0); // set to 1 to write _postback.log
define('LOG_FILE', __DIR__ . '/_postback.log');
/**
* Only accept callbacks from the vote list's public IP.
* Leave empty to skip the allowlist (not recommended in production).
*
* Example: define('VOTE_LIST_IP', '203.0.113.10');
*/
define('VOTE_LIST_IP', '');
$ipRequest = $_SERVER['HTTP_CF_CONNECTING_IP']
?? (isset($_SERVER['HTTP_X_FORWARDED_FOR'])
? trim(explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR'])[0])
: null)
?? $_SERVER['REMOTE_ADDR']
?? '';
$ipRequest = trim((string) $ipRequest);
if (VOTE_LIST_IP !== '' && $ipRequest !== VOTE_LIST_IP) {
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[Invalid] Request from {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}
http_response_code(403);
exit('Forbidden');
}
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[OK] Valid callback: {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}
// Clean parameters from the vote list (letters, numbers, underscore, hyphen).
$p = preg_replace('/[^A-Za-z0-9_\-]+/', '', (string) ($_GET['p_resp'] ?? '')) ?? '';
$userIp = preg_replace('/[^0-9a-fA-F:\.]+/', '', (string) ($_GET['ip'] ?? '')) ?? '';
if ($p === '') {
http_response_code(400);
exit('Missing p_resp');
}
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[GET] Parameters [p_resp]={$p} [ip]={$userIp}" . PHP_EOL, 3, LOG_FILE);
}
// ---------------------------------------------------------------------------
// Connect to your database, verify account $p exists, enforce your own
// cooldown if needed, then grant vote points / items to $p (voted from $userIp).
// We send p_resp + ip ONLY when that player successfully voted on the list.
// ---------------------------------------------------------------------------
http_response_code(200);
echo 'OK';
03
Minecraft Votifier
Ми можемо надіслати голос прямо на твій Minecraft-сервер. Listener-плагін тоді виконає твої команди нагород.
Файрвол: дозволь вхідний TCP з публічної IP цього сайту на порт Votifier (за замовчуванням 8192). Не відкривай порт на весь інтернет, якщо можеш цього уникнути.
1
Гравець вводить нік Minecraft на нашій сторінці голосування (або заходить через ?p=Steve).
2
Голос успішно зараховується в цьому списку.
3
Ми підключаємося до хоста/порту Votifier і доставляємо пакет голосу.
4
Твій listener видає скрині, ключі, гроші тощо.
Увімкни Votifier у Деталях Minecraft, обери NuVotifier v2 або Classic, тоді вкажи хост, порт і токен або публічний ключ RSA.
Встанови NuVotifier (classic RSA і протокол v2) або classic Votifier, плюс listener під твою версію Minecraft (GAListener, SuperbVote або власний listener).
Classic / v1: встав повний файл public.key. Хост і порт — у config.yml. Залиш debug: true, поки підключаєш цей список, потім вимкни.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Пакети ідентифікують цей список як: JoinGameServers
04
NuVotifier v2
Протокол v2 замінює RSA спільним токеном і одноразовим challenge. Прив'яжи токен до імені сервісу цього списку або використай токен за замовчуванням.
У привітанні немає challenge — використай Classic або онови NuVotifier і увімкни v2.
Недійсний підпис / невідомий сервіс
Невірний токен або ім'я сервісу не прив'язане. Додай ім'я сервісу списку або використай default.
З'єднання не вдалося / timeout
Невірний хост/порт, Votifier офлайн або файрвол блокує IP цього списку.
Немає відповіді
Втручання проксі/плагіна; увімкни debug NuVotifier і спробуй ще раз.
05
Чекліст тестування
Збережи налаштування запису без помилок валідації.
Відкрий мотиваційне посилання — поле нікнейму має заповнитися з ?p=.
Віддай один голос. Маєш побачити стан успіху. Другий голос протягом 24 годин має бути заблокований.
Перевір postback: увімкни DEBUG у приймачі; підтверди, що приходять p_resp і ip.
Перевір Votifier: з debug true консоль Minecraft має показати вхідний голос для твого ніку та імені сервісу цього списку.
Підтверди нагороду в грі або на сайті. Якщо ні — лагодь listener; голос у списку все одно зараховується.
Спроби доставки записуються в vote_reward_logs (ok / fail / skipped). Невдалий callback ніколи не відкочує голос у цьому списку.
06
FAQ і усунення проблем
Ні. Гості можуть голосувати. Акаунти в системі мають ті самі правила кулдауну 24 години для захисту від зловживань.
Якщо ти налаштував URL postback або Votifier, нам потрібен параметр, щоб сказати, кого нагороджувати. Без нагород нікнейм лишається необов'язковим.
Так. Обидва запускаються після успішного голосу. Помилки незалежні.
Це має бути публічний URL http(s). Localhost, .local, приватні IP (напр. 10.*, 192.168.*) і URL з вбудованими обліковими даними блокуються.
Переконайся, що голос пройшов у цьому списку. Перевір логи postback або debug NuVotifier. Перевір allowlist файрвола й чи нікнейм збігається з акаунтом у грі. Кулдаун списку — 24 години; твій власний кулдаун нагород може відрізнятися.
Лише A–Z, a–z, 0–9, _ і -. Усе інше відкидається. Тримай параметри ≤ 32 символи.
Встановити застосунокДодайте JoinGameServers на головний екран для швидкого доступу.