Když trefíme tvůj postback s p_resp=Razor, hráč Razor zahlasoval. Hodnota ip je adresa, kterou použil na tomto seznamu.
Co by měl dělat tvůj skript
Ověř, že požadavek přichází z veřejné IP tohoto seznamu.
Vyčisti p_resp a ip (nikdy nevěř surovým datům).
Potvrď, že účet / postava existuje v tvé databázi.
Aplikuj vlastní cooldown odměn, pokud potřebuješ něco přísnějšího než 24 hodin.
Udělej body, mince nebo itemy; zaloguj událost; vrať HTTP 200.
Příklad postback.php
Hostuj to na webu s odměnami, ne nutně na tomto seznamu hlasů. Před spuštěním nastav VOTE_LIST_IP na odchozí veřejnou IP tohoto 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 můžeme poslat rovnou na tvůj Minecraft server. Listener plugin pak spustí tvoje příkazy odměn.
Firewall: povol příchozí TCP z veřejné IP tohoto webu na Votifier port (výchozí 8192). Pokud můžeš, nevystavuj port na celý internet.
1
Hráč zadá Minecraft nick na naší stránce hlasování (nebo přijde přes ?p=Steve).
2
Hlas projde na tomto seznamu.
3
Připojíme se k tvému Votifier hostu/portu a doručíme paket hlasu.
4
Tvůj listener udělí crate, klíče, peníze atd.
Zapni Votifier v Detaily Minecraft, zvol NuVotifier v2 nebo Classic a pak zadej host, port a token nebo RSA veřejný klíč.
Nainstaluj NuVotifier (classic RSA a protokol v2) nebo classic Votifier plus listener pro tvoji verzi Minecraftu (GAListener, SuperbVote nebo vlastní listener).
Classic / v1: vlož celý soubor public.key. Host a port jsou v config.yml. Při napojování na tento seznam nech debug: true, pak to vypni.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Pakety identifikují tento seznam jako: JoinGameServers
04
NuVotifier v2
Protokol v2 nahrazuje RSA sdíleným tokenem a jednorázovým challenge. Namapuj token na service name tohoto seznamu, nebo použij výchozí token.
Greeting nemá challenge — použij Classic, nebo aktualizuj NuVotifier a zapni v2.
Neplatný podpis / neznámá služba
Špatný token, nebo service name není namapovaný. Přidej service name seznamu, nebo použij výchozí.
Připojení selhalo / timeout
Špatný host/port, Votifier offline, nebo firewall blokuje IP tohoto seznamu.
Žádná odpověď
Interference proxy/pluginu; zapni NuVotifier debug a zkus to znovu.
05
Kontrolní seznam testů
Ulož nastavení záznamu bez chyb validace.
Otevři incentive odkaz — pole nicku by se mělo předvyplnit z ?p=.
Dej jeden hlas. Měl bys vidět úspěšný stav. Druhý hlas do 24 hodin musí být zablokovaný.
Ověř postback: zapni DEBUG v přijímači; potvrď, že dorazí p_resp a ip.
Ověř Votifier: při debug true by Minecraft konzole měla ukázat příchozí hlas pro tvůj nick a service name tohoto seznamu.
Potvrď odměnu ve hře nebo na webu. Pokud ne, oprav listener — hlas na seznamu se stejně počítá.
Pokusy o doručení se zapisují do vote_reward_logs (ok / fail / skipped). Neúspěšný callback nikdy nevrací hlas na tomto seznamu.
06
FAQ a řešení problémů
Ne. Hosté můžou hlasovat. Přihlášené účty mají stejná pravidla 24hodinového cooldownu kvůli ochraně před zneužitím.
Pokud jsi nastavil postback URL nebo Votifier, potřebujeme parametr, abychom věděli, koho odměnit. Bez nastavených odměn zůstává nick volitelný.
Ano. Oba běží po úspěšném hlasu. Selhání jsou nezávislá.
Musí to být veřejná http(s) URL. Localhost, .local, privátní IP (např. 10.*, 192.168.*) a URL s přihlašovacími údaji jsou blokované.
Potvrď, že hlas prošel na tomto seznamu. Zkontroluj logy postbacku nebo NuVotifier debug výstup. Ověř allowlist ve firewallu a že nick sedí na herní účet. Cooldown seznamu je 24 hodin; vlastní cooldown odměn může být jiný.
Jen A–Z, a–z, 0–9, _ a -. Všechno ostatní se ořízne. Parametry drž ≤ 32 znaků.
Nainstalovat aplikaciPřidejte JoinGameServers na plochu pro rychlý přístup.