Ricompense voto

Voting Check

Come ricompensare i giocatori dopo un voto valido per la tua inserzione su JoinGameServers.

Percorso setup: Dashboard → Modifica server → Ricompense vote (e Dettagli Minecraft per Votifier).

01

Come funziona

  1. Il giocatore apre il tuo link vote, idealmente con ?p=USERNAME così il form è precompilato.

  2. Invia il voto. Applichiamo cooldown 24 ore per IP (e per account connesso). Se le ricompense sono configurate, username / parametro è obbligatorio.

  3. Notifichiamo i sistemi di ricompensa: HTTP GET al tuo URL postback e/o pacchetto Votifier al tuo host Minecraft — con lo stesso parametro e IP del votante.

  4. Tu assegni la ricompensa. Errori di delivery sul tuo side sono loggati qui ma non rimuovono il voto.

Scegli un metodo

HTTP Postback

Ideale per siti, launcher e giochi non-Minecraft. Per Minecraft è un'alternativa opzionale a Votifier (o un'aggiunta se ricompensi anche sul sito).

  • Funziona per ogni gioco su questa lista
  • Tu controlli punti, cooldown e log
  • Serve un endpoint HTTPS pubblico
Postback PHP →
Ideale per Minecraft

Minecraft Votifier

Preferito per Minecraft. Ideale per crate, chiavi e plugin listener in-game. Apriamo una connessione TCP al tuo port Votifier.

  • Solo inserzioni Minecraft
  • Classic RSA o token NuVotifier v2
  • Porta aperta + allowlist firewall
Minecraft Votifier →

Per Minecraft, usa Votifier per primo. HTTP postback è opzionale (o aggiuntivo). Ogni canale attivo funziona in modo indipendente dopo il voto.

Avvio rapido

  1. Accedi e apri la Dashboard.
  2. Modifica la tua inserzione approvata.
  3. Imposta URL Postback e/o attiva Votifier sotto Dettagli Minecraft.
  4. Copia il link vote incentive dal form (finisce con ?p=USERNAME).
  5. Metti il link sul sito o Discord; sostituisci USERNAME per ogni giocatore.
  6. Fai un voto di test e verifica che arrivino le ricompense.
02

Postback PHP

Dopo un voto valido richiamiamo il tuo URL con il parametro del giocatore e il suo IP. Il tuo script segna l'account come votato e assegna punti o oggetti.

Inserisci l'IP pubblico outbound di questo sito nella firewall e nello script postback. Rifiuta altre sorgenti. Preferisci HTTPS.

1. Imposta URL Postback

Dashboard → Modifica server → Ricompense vote → URL Postback.

https://YOURDOMAIN/postback.php
  • Il nome file è libero — usa il path che preferisci.
  • Solo URL http/https pubblici. Localhost, IP LAN privati e URL con credenziali sono rifiutati (protezione SSRF).
  • Seguiamo un numero limitato di redirect e timeout in pochi secondi così il voto resta veloce.

2. Crea link vote incentive

Aggiungi un parametro così ogni giocatore è identificato quando arriva sulla pagina vote.

/GAME/server/SLUG/vote?p=PARAMETER
Elemento Regole
PARAMETER / p_resp Solo lettere, numeri, _, - · max 32 caratteri · username, id account o qualsiasi id che tracci
ip IPv4 o IPv6 del votante come vista da questa lista (proxy-aware se attivo)
Query prefill ?p= oppure ?username=

3. Cosa chiamiamo dopo un voto

Solo in caso di successo. Se il giocatore non ha completato un voto valido, non inviamo richieste.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Link incentive Il nostro callback
/minecraft-server/server/your-server-slug/vote?p=1234 …/postback.php?p_resp=1234&ip=123.123.123.123
/minecraft-server/server/your-server-slug/vote?p=Razor …/postback.php?p_resp=Razor&ip=123.123.123.123

Quando chiamiamo il postback con p_resp=Razor, il giocatore Razor ha votato. Il valore ip è l'indirizzo usato su questa lista.

Cosa dovrebbe fare il tuo script

  • Verifica che la richiesta arrivi dall'IP pubblico di questa lista.
  • Sanitizza p_resp e ip (non fidarsi dell'input grezzo).
  • Conferma che account / character esiste nel database.
  • Applica il tuo cooldown ricompensa se serve qualcosa più stretto di 24 ore.
  • Assegna punti, monete o oggetti; logga l'evento; rispondi HTTP 200.

Esempio postback.php

Hosta questo sul sito delle ricompense, non necessariamente su questa lista vote. Imposta VOTE_LIST_IP all'IP pubblico outbound di questo sito prima del go-live.

<?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

Possiamo inserire il voto direttamente nel tuo server Minecraft. Un plugin listener esegue i comandi di ricompensa.

Firewall: consenti TCP inbound dall'IP pubblico di questo sito al tuo port Votifier (default 8192). Non esporre il port a tutta internet se puoi evitarlo.

  1. Il giocatore inserisce il suo username Minecraft sulla nostra pagina vote (o arriva via ?p=Steve).

  2. Il voto ha successo su questa lista.

  3. Ci connettiamo al tuo host/port Votifier e consegniamo il pacchetto vote.

  4. Il tuo listener assegna crate, chiavi, soldi, ecc.

Attiva Votifier sotto Dettagli Minecraft, scegli NuVotifier v2 o Classic, poi inserisci host, port e token o chiave pubblica RSA.

Installa NuVotifier (classic RSA e protocol v2) o classic Votifier, più un listener per la tua versione Minecraft (GAListener, SuperbVote o listener custom).

Classic / v1: incolla l'intero file public.key. Host e port sono in config.yml. Tieni debug: true mentre colleghi questa lista, poi disattivalo.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

I pacchetti identificano questa lista come: JoinGameServers

04

NuVotifier v2

Protocol v2 sostituisce RSA con un token condiviso e una challenge one-time. Mappa un token al service name di questa lista o usa il token default.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

Formato wire: TCP connect → leggi greeting VOTIFIER 2 <challenge> → payload JSON (username, serviceName, timestamp ms, address, challenge) → Base64(HMAC-SHA256(payload, token)) → magic 0x733A + length + JSON {signature, payload}. Aspetta {"status":"ok"}.

Sintomo Causa probabile
Non è un server NuVotifier v2 Il greeting non ha challenge — usa Classic o aggiorna NuVotifier e attiva v2.
Firma non valida / servizio sconosciuto Token errato o service name non mappato. Aggiungi il service name della lista o usa default.
Connessione fallita / timeout Host/port errato, Votifier offline o firewall che blocca l'IP di questa lista.
Nessuna risposta Interferenza proxy/plugin; attiva debug NuVotifier e riprova.
05

Checklist test

  1. Salva le impostazioni senza errori di validazione.
  2. Apri un link incentive — il campo username deve precompilarsi da ?p=.
  3. Fai un voto. Dovresti vedere lo stato di successo. Un secondo voto entro 24 ore deve essere bloccato.
  4. Verifica postback: attiva DEBUG nel receiver; conferma che arrivano p_resp e ip.
  5. Verifica Votifier: con debug true, la console Minecraft dovrebbe mostrare un voto incoming per il tuo username e il service name di questa lista.
  6. Conferma la ricompensa in-game o sul sito. Se non arriva, correggi il listener — il voto sulla lista conta comunque.

I tentativi di delivery sono in vote_reward_logs (ok / fail / skipped). Un callback fallito non annulla il voto su questa lista.

06

FAQ e troubleshooting

No. I guest possono votare. Gli account connessi condividono le stesse regole cooldown 24 ore per prevenire abusi.

Se hai configurato postback URL o Votifier, serve un parametro per sapere chi ricompensare. Senza ricompense configurate, username resta opzionale.

Sì. Entrambi partono dopo un voto valido. Gli errori sono indipendenti.

Deve essere un URL http(s) pubblico. Localhost, .local, IP privati (es. 10.*, 192.168.*) e URL con credenziali sono bloccati.

Conferma che il voto ha successo su questa lista. Controlla log postback o output debug NuVotifier. Verifica allowlist firewall e che l'username corrisponda all'account in-game. Cooldown lista: 24 ore; il tuo cooldown ricompensa può essere diverso.

Solo A–Z, a–z, 0–9, _ e -. Tutto il resto viene rimosso. Parametri ≤ 32 caratteri.