Ruta de configuración: Panel → Editar servidor → Recompensas por voto (y Detalles de Minecraft para Votifier).
01
Cómo funciona
1
El jugador abre tu enlace de voto, idealmente con ?p=USERNAME para prefijar el formulario.
2
Envía el voto. Aplicamos un cooldown de 24 horas por IP (y por cuenta si ha iniciado sesión). Si hay recompensas configuradas, el nombre de usuario / parámetro es obligatorio.
3
Notificamos tus sistemas de recompensa: HTTP GET a tu URL de postback y/o un paquete Votifier a tu host de Minecraft — con el mismo parámetro y la IP del votante.
4
Tú otorgas la recompensa. Los fallos de entrega en tu lado se registran aquí pero no eliminan el voto.
Elige un método
HTTP Postback
Ideal para sitios web, launchers y juegos que no sean Minecraft. Para Minecraft es una alternativa opcional a Votifier (o un complemento si también recompensas en un sitio web).
Cuando llamamos a tu postback con p_resp=Razor, el jugador Razor ha votado. El valor ip es la dirección que usó en esta lista.
Qué debe hacer tu script
Verificar que la petición proviene de la IP pública de esta lista.
Sanitizar p_resp e ip (nunca confíes en la entrada sin filtrar).
Confirmar que la cuenta / personaje existe en tu base de datos.
Aplicar tu propio cooldown de recompensa si necesitas algo más estricto que 24 horas.
Otorgar puntos, monedas o ítems; registrar el evento; devolver HTTP 200.
Ejemplo postback.php
Alójalo en tu sitio de recompensas, no necesariamente en esta lista de votos. Configura VOTE_LIST_IP con la IP pública de salida de este sitio antes de publicar.
<?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
Podemos enviar el voto directamente a tu servidor de Minecraft. Un plugin listener ejecuta entonces tus comandos de recompensa.
Firewall: permite TCP entrante desde la IP pública de este sitio a tu puerto Votifier (predeterminado 8192). No expongas el puerto a todo internet si puedes evitarlo.
1
El jugador introduce su nombre de Minecraft en nuestra página de voto (o llega con ?p=Steve).
2
El voto tiene éxito en esta lista.
3
Nos conectamos a tu host/puerto Votifier y entregamos el paquete de voto.
4
Tu listener otorga cajas, llaves, dinero, etc.
Activa Votifier en Detalles de Minecraft, elige NuVotifier v2 o Classic, e introduce host, puerto y token o clave pública RSA.
Instala NuVotifier (RSA classic y protocolo v2) o Votifier classic, más un listener para tu versión de Minecraft (GAListener, SuperbVote o uno personalizado).
Classic / v1: pega el archivo public.key completo. Host y puerto vienen de config.yml. Mantén debug: true mientras conectas esta lista, luego desactívalo.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Los paquetes identifican esta lista como: JoinGameServers
04
NuVotifier v2
El protocolo v2 sustituye RSA por un token compartido y un challenge de un solo uso. Asocia un token al nombre de servicio de esta lista o usa el token por defecto.
El saludo no tiene challenge — usa Classic o actualiza NuVotifier y activa v2.
Firma no válida / servicio desconocido
Token incorrecto o nombre de servicio no asociado. Añade el nombre de servicio de la lista o usa el predeterminado.
Conexión fallida / timeout
Host/puerto incorrecto, Votifier offline o firewall bloqueando la IP de esta lista.
Sin respuesta
Interferencia de proxy/plugin; activa debug en NuVotifier e inténtalo de nuevo.
05
Lista de pruebas
Guarda la configuración del listado sin errores de validación.
Abre un enlace con incentivo — el campo de nombre de usuario debe prefijarse desde ?p=.
Emite un voto. Debes ver el estado de éxito. Un segundo voto en 24 horas debe bloquearse.
Verifica postback: activa DEBUG en tu receptor; confirma que lleguen p_resp e ip.
Verifica Votifier: con debug true, la consola de Minecraft debe mostrar un voto entrante con tu nombre de usuario y el nombre de servicio de esta lista.
Confirma la recompensa en el juego o en el sitio. Si no, corrige el listener — el voto en la lista sigue contando.
Los intentos de entrega se registran en vote_reward_logs (ok / fail / skipped). Un callback fallido nunca revierte el voto en esta lista.
06
FAQ y solución de problemas
No. Los invitados pueden votar. Las cuentas con sesión comparten las mismas reglas de cooldown de 24 horas para evitar abusos.
Si configuraste una URL de postback o Votifier, necesitamos un parámetro para saber a quién recompensar. Sin recompensas configuradas, el nombre de usuario sigue siendo opcional.
Sí. Ambos se ejecutan tras un voto exitoso. Los fallos son independientes.
Debe ser una URL http(s) pública. Localhost, .local, IPs privadas (p. ej. 10.*, 192.168.*) y URLs con credenciales incrustadas están bloqueadas.
Confirma que el voto tuvo éxito en esta lista. Revisa tus logs de postback o la salida debug de NuVotifier. Verifica listas blancas del firewall y que el nombre de usuario coincida con una cuenta en el juego. El cooldown de la lista es 24 horas; tu propio cooldown de recompensa puede diferir.
Solo A–Z, a–z, 0–9, _ y -. Cualquier otro se elimina. Mantén los parámetros ≤ 32 caracteres.
Instalar appAñade JoinGameServers a tu pantalla de inicio para un acceso rápido.