Keď hitneme tvoj postback s p_resp=Razor, hráč Razor zahlasoval. Hodnota ip je adresa, ktorú použil v tomto zozname.
Čo by mal tvoj skript urobiť
Over, že request prichádza z verejnej IP tohto zoznamu.
Sanitizuj p_resp a ip (nikdy never surovému vstupu).
Over, že účet / postava existuje v tvojej databáze.
Aplikuj vlastný reward cooldown, ak potrebuješ niečo prísnejšie ako 24 hodín.
Udeľ body, coins alebo itemy; zaloguj udalosť; vráť HTTP 200.
Príklad postback.php
Hostuj toto na svojom reward webe, nie nutne na tomto vote zozname. Pred spustením nastav VOTE_LIST_IP na odchádzajúcu verejnú IP tohto webu.
<?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
Hlas vieme poslať priamo do tvojho Minecraft servera. Listener plugin potom spustí tvoje reward príkazy.
Firewall: povoľ prichádzajúci TCP z verejnej IP tohto webu na tvoj Votifier port (predvolene 8192). Ak sa dá, nevystavuj port celému internetu.
1
Hráč zadá svoje Minecraft meno na našej stránke hlasovania (alebo príde cez ?p=Steve).
2
Hlas uspeje v tomto zozname.
3
Pripojíme sa na tvoj Votifier host/port a doručíme vote paket.
4
Tvoj listener udelí cratey, kľúče, peniaze atď.
Zapni Votifier v Detaily Minecraft, vyber NuVotifier v2 alebo Classic a zadaj host, port a token alebo RSA verejný kľúč.
Nainštaluj NuVotifier (classic RSA a protokol v2) alebo classic Votifier plus listener pre tvoju verziu Minecraft (GAListener, SuperbVote alebo vlastný listener).
Classic / v1: vlož celý súbor public.key. Host a port berú z config.yml. Kým napájaš tento zoznam, nechaj debug: true, potom to vypni.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Pakety identifikujú tento zoznam ako: JoinGameServers
04
NuVotifier v2
Protokol v2 nahrádza RSA zdieľaným tokenom a jednorazovou výzvou. Mapuj token na service name tohto zoznamu, alebo použi predvolený token.
Greeting nemá challenge — použi Classic, alebo upgradni NuVotifier a zapni v2.
Neplatný podpis / neznámy service
Zlý token, alebo service name nie je namapovaný. Pridaj service name zoznamu alebo použi default.
Connect zlyhal / timeout
Zlý host/port, Votifier offline, alebo firewall blokuje IP tohto zoznamu.
Žiadna odpoveď
Interference proxy/pluginu; zapni NuVotifier debug a skús znova.
05
Kontrolný zoznam testovania
Ulož nastavenia záznamu bez chýb validácie.
Otvor incentive odkaz — pole používateľského mena by sa malo predvyplniť z ?p=.
Odovzdaj jeden hlas. Mal by si vidieť úspešný stav. Druhý hlas do 24 hodín musí byť zablokovaný.
Over postback: zapni DEBUG v receiveri; potvrď príchod p_resp a ip.
Over Votifier: pri debug true by Minecraft konzola mala ukázať prichádzajúci hlas pre tvoje meno a service name tohto zoznamu.
Potvrď in-game alebo webovú odmenu. Ak nie, oprav listener — hlas v zozname aj tak platí.
Pokusy o doručenie sa zapisujú do vote_reward_logs (ok / fail / skipped). Zlyhaný callback nikdy nevráti hlas v tomto zozname späť.
06
FAQ a riešenie problémov
Nie. Hostia môžu hlasovať. Prihlásené účty zdieľajú rovnaké 24-hodinové cooldown pravidlá proti zneužitiu.
Ak máš nastavenú postback URL alebo Votifier, potrebujeme parameter, aby sme ti povedali, koho odmeniť. Bez nastavených odmien ostáva meno voliteľné.
Áno. Oba bežia po úspešnom hlase. Zlyhania sú nezávislé.
Musí to byť verejná http(s) URL. Localhost, .local, privátne IP (napr. 10.*, 192.168.*) a URL so zabudovanými credentials sú blokované.
Over, že hlas uspel v tomto zozname. Skontroluj postback logy alebo NuVotifier debug výstup. Over firewall allowlisty a že používateľské meno sedí s in-game účtom. Cooldown zoznamu je 24 hodín; vlastný reward cooldown môže byť iný.
Len A–Z, a–z, 0–9, _ a -. Všetko ostatné sa odstráni. Parametre drž ≤ 32 znakov.
Nainštalovať aplikáciuPridajte JoinGameServers na domovskú obrazovku pre rýchly prístup.