Récompenses de vote

Voting Check

Comment récompenser les joueurs après un vote réussi pour ta fiche sur JoinGameServers.

Configuration : Tableau de bord → Modifier le serveur → Récompenses de vote (et Détails Minecraft pour Votifier).

01

Fonctionnement

  1. Le joueur ouvre ton lien de vote, idéalement avec ?p=USERNAME pour préremplir le formulaire.

  2. Il envoie son vote. Nous appliquons un délai de 24 h par IP (et par compte connecté). Si des récompenses sont configurées, le nom d'utilisateur / paramètre est obligatoire.

  3. Nous notifions tes systèmes de récompense : requête HTTP GET vers ton URL de postback et/ou paquet Votifier vers ton hôte Minecraft — avec le même paramètre et l'IP du votant.

  4. Tu accordes la récompense. Les échecs de livraison de ton côté sont journalisés ici mais ne suppriment pas le vote.

Choisir une méthode

Postback HTTP

Idéal pour les sites web, launchers et jeux hors Minecraft. Pour Minecraft, alternative optionnelle à Votifier (ou en complément si tu récompenses aussi sur un site).

  • Fonctionne pour tous les jeux de cette liste
  • Tu contrôles points, délais et journaux
  • Nécessite un endpoint HTTPS public
Postback PHP →
Idéal pour Minecraft

Minecraft Votifier

Recommandé pour Minecraft. Idéal pour les caisses, clés et plugins listener en jeu. Nous ouvrons une connexion TCP vers ton port Votifier.

  • Fiches Minecraft uniquement
  • RSA classic ou jeton NuVotifier v2
  • Port ouvert + liste blanche firewall
Minecraft Votifier →

Pour Minecraft, privilégie Votifier. Le postback HTTP est optionnel (ou additionnel). Chaque canal activé fonctionne indépendamment après le vote.

Démarrage rapide

  1. Connecte-toi et ouvre le tableau de bord.
  2. Modifie ta fiche de serveur approuvée.
  3. Définis une URL de postback et/ou active Votifier dans Détails Minecraft.
  4. Copie le lien de vote incitatif depuis le formulaire (se termine par ?p=USERNAME).
  5. Place ce lien sur ton site ou Discord ; remplace USERNAME pour chaque joueur.
  6. Effectue un vote test et vérifie que les récompenses arrivent.
02

Postback PHP

Après un vote réussi, nous appelons ton URL avec le paramètre joueur et son IP. Ton script marque le compte comme ayant voté et accorde points ou objets.

Autorise l'IP publique sortante de ce site dans ton firewall et ton script de postback. Rejette toute autre source. Privilégie HTTPS.

1. Définir ton URL de postback

Tableau de bord → Modifier le serveur → Récompenses de vote → URL de postback.

https://YOURDOMAIN/postback.php
  • Le nom du fichier est libre — utilise le chemin que tu préfères.
  • Seules les URL http/https publiques sont acceptées. Localhost, IP LAN privées et identifiants dans l'URL sont rejetés (protection SSRF).
  • Nous suivons un petit nombre de redirections et expirons au bout de quelques secondes pour garder le vote rapide.

2. Construire des liens de vote incitatifs

Ajoute un paramètre pour identifier chaque joueur à l'arrivée sur la page de vote.

/GAME/server/SLUG/vote?p=PARAMETER
Élément Règles
PARAMETER / p_resp Lettres, chiffres, _, - uniquement · 32 caractères max · pseudo, ID de compte ou tout identifiant suivi
ip IPv4 ou IPv6 du votant telle que vue par cette liste (compatible proxy si activé)
Paramètre de préremplissage ?p= ou ?username=

3. Ce que nous appelons après un vote

Uniquement en cas de succès. Si le joueur n'a pas effectué un vote valide, aucune requête n'est envoyée.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Lien incitatif Notre 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

Lorsque nous appelons ton postback avec p_resp=Razor, le joueur Razor a voté. La valeur ip est l'adresse utilisée sur cette liste.

Ce que ton script doit faire

  • Vérifier que la requête provient de l'IP publique de cette liste.
  • Assainir p_resp et ip (ne jamais faire confiance aux entrées brutes).
  • Confirmer que le compte / personnage existe dans ta base de données.
  • Appliquer ton propre délai de récompense si tu veux quelque chose de plus strict que 24 h.
  • Accorder points, pièces ou objets ; journaliser l'événement ; renvoyer HTTP 200.

Exemple postback.php

Héberge ce script sur ton site de récompenses, pas forcément sur cette liste de votes. Définis VOTE_LIST_IP avec l'IP publique sortante de ce site avant la mise en production.

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

Nous pouvons transmettre le vote directement à ton serveur Minecraft. Un plugin listener exécute ensuite tes commandes de récompense.

Firewall : autorise le TCP entrant depuis l'IP publique de ce site vers ton port Votifier (8192 par défaut). N'expose pas le port à tout Internet si tu peux l'éviter.

  1. Le joueur saisit son pseudo Minecraft sur notre page de vote (ou arrive via ?p=Steve).

  2. Le vote est validé sur cette liste.

  3. Nous nous connectons à ton hôte/port Votifier et livrons le paquet de vote.

  4. Ton listener accorde caisses, clés, monnaie, etc.

Active Votifier dans Détails Minecraft, choisis NuVotifier v2 ou Classic, puis saisis hôte, port et jeton ou clé publique RSA.

Installe NuVotifier (RSA classic et protocole v2) ou Votifier classic, plus un listener pour ta version Minecraft (GAListener, SuperbVote ou listener personnalisé).

Classic / v1 : colle le fichier public.key complet. Hôte et port viennent de config.yml. Garde debug: true pendant la connexion à cette liste, puis désactive-le.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

Les paquets identifient cette liste comme : JoinGameServers

04

NuVotifier v2

Le protocole v2 remplace RSA par un jeton partagé et un challenge unique. Associe un jeton au nom de service de cette liste, ou utilise le jeton par défaut.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

Format : connexion TCP → lecture du greeting VOTIFIER 2 <challenge> → payload JSON (username, serviceName, timestamp ms, address, challenge) → Base64(HMAC-SHA256(payload, token)) → magic 0x733A + length + JSON {signature, payload}. Attendu : {"status":"ok"}.

Symptôme Cause probable
Pas un serveur NuVotifier v2 Le greeting n'a pas de challenge — utilise Classic, ou mets à jour NuVotifier et active v2.
Signature invalide / service inconnu Mauvais jeton, ou nom de service non associé. Ajoute le nom de service de la liste ou utilise le jeton par défaut.
Connexion échouée / timeout Mauvais hôte/port, Votifier hors ligne, ou firewall bloquant l'IP de cette liste.
Aucune réponse Interférence proxy/plugin ; active le debug NuVotifier et réessaie.
05

Liste de tests

  1. Enregistrer les paramètres de la fiche sans erreur de validation.
  2. Ouvrir un lien incitatif — le champ pseudo doit être prérempli depuis ?p=.
  3. Effectuer un vote. L'état de succès doit s'afficher. Un second vote sous 24 h doit être bloqué.
  4. Vérifier le postback : active DEBUG dans ton récepteur ; confirme l'arrivée de p_resp et ip.
  5. Vérifier Votifier : avec debug activé, la console Minecraft doit afficher un vote entrant pour ton pseudo et le nom de service de cette liste.
  6. Confirmer la récompense en jeu ou sur le site. Sinon, corrige le listener — le vote sur la liste reste comptabilisé.

Les tentatives de livraison sont enregistrées dans vote_reward_logs (ok / fail / skipped). Un callback échoué ne annule jamais le vote sur cette liste.

06

FAQ & dépannage

Non. Les visiteurs peuvent voter. Les comptes connectés partagent les mêmes règles de délai de 24 h pour prévenir les abus.

Si tu as configuré une URL de postback ou Votifier, nous avons besoin d'un paramètre pour savoir qui récompenser. Sans récompenses configurées, le pseudo reste facultatif.

Oui. Les deux s'exécutent après un vote réussi. Les échecs sont indépendants.

Elle doit être une URL http(s) publique. Localhost, .local, IP privées (ex. 10.*, 192.168.*) et URL avec identifiants intégrés sont bloquées.

Confirme que le vote a réussi sur cette liste. Vérifie tes journaux de postback ou la sortie debug NuVotifier. Contrôle la liste blanche firewall et que le pseudo correspond à un compte en jeu. Le délai de la liste est de 24 h ; ton propre délai peut différer.

Uniquement A–Z, a–z, 0–9, _ et -. Tout le reste est supprimé. Garde les paramètres ≤ 32 caractères.