Stemmebelønninger

Voting Check

Slik belønner du spillere etter at de har stemt på listingen din på JoinGameServers.

Oppsett: Dashboard → Rediger server → Vote Rewards (og Minecraft-detaljer for Votifier).

01

Slik fungerer det

  1. Spilleren åpner stemmelenken din, ideelt med ?p=USERNAME så skjemaet er forhåndsutfylt.

  2. De sender inn stemmen. Vi håndhever 24 timers cooldown per IP (og per innlogget konto). Hvis rewards er konfigurert, kreves brukernavn / parameter.

  3. Vi varsler reward-systemene dine: HTTP GET til postback-URL-en og/eller en Votifier-pakke til Minecraft-hosten din — med samme parameter og stemmerens IP.

  4. Du gir rewarden. Leveringsfeil på din side logges her, men fjerner ikke stemmen.

Velg en metode

HTTP Postback

Best for nettsteder, launchere og spill som ikke er Minecraft. For Minecraft er dette et valgfritt alternativ til Votifier (eller et tillegg hvis du også belønner på et nettsted).

  • Fungerer for alle spill på denne listen
  • Du styrer poeng, cooldowns og logging
  • Krever et offentlig HTTPS-endepunkt
Postback PHP →
Best for Minecraft

Minecraft Votifier

Foretrukket for Minecraft. Best for in-game crates, keys og listener-plugins. Vi åpner en TCP-tilkobling til Votifier-porten din.

  • Bare Minecraft-listings
  • Classic RSA eller NuVotifier v2-token
  • Krever åpen port + firewall-allowlist
Minecraft Votifier →

For Minecraft: bruk Votifier først. HTTP postback er valgfritt (eller ekstra). Hver aktiverte kanal kjører uavhengig etter stemmen.

Kom raskt i gang

  1. Logg inn og åpne Dashboard.
  2. Rediger den godkjente serverlistingen din.
  3. Sett en Postback-URL og/eller aktiver Votifier under Minecraft-detaljer.
  4. Kopier incentive-stemmelenken fra redigeringsskjemaet (ender med ?p=USERNAME).
  5. Plasser den lenken på nettstedet eller Discord; erstatt USERNAME per spiller.
  6. Gi en teststemme og bekreft at rewards kommer frem.
02

Postback PHP

Etter en vellykket stemme ber vi om URL-en din med spillerparameteren og IP-en deres. Scriptet ditt markerer den kontoen som har stemt og gir poeng eller items.

Whitelist denne nettsidens offentlige utgående IP i firewall og postback-script. Avvis alle andre kilder. Foretrekk HTTPS.

1. Sett Postback-URL

Dashboard → Rediger server → Vote Rewards → Postback-URL.

https://YOURDOMAIN/postback.php
  • Filnavnet er valgfritt — bruk hvilken som helst sti stacken din foretrekker.
  • Bare offentlige http/https-URL-er godtas. Localhost, private LAN-IP-er og URL-credentials avvises (SSRF-beskyttelse).
  • Vi følger et lite antall redirects og timer ut etter noen sekunder, så stemming holder seg rask.

2. Bygg incentive-stemmelenker

Legg til en parameter så hver spiller identifiseres når de lander på stemmesiden.

/GAME/server/SLUG/vote?p=PARAMETER
Del Regler
PARAMETER / p_resp Bare bokstaver, tall, _, - · maks 32 tegn · brukernavn, konto-id eller hvilken som helst id du sporer
ip IPv4 eller IPv6 for stemmeren slik den ses av denne listen (proxy-aware når aktivert)
Forhåndsutfyll-query ?p= eller ?username=

3. Hva vi kaller etter en stemme

Bare ved suksess. Hvis spilleren ikke fullførte en gyldig stemme, sender vi ingen forespørsel.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Incentive-lenke Vår 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

Når vi treffer postbacken din med p_resp=Razor, har spilleren Razor stemt. ip-verdien er adressen de brukte på denne listen.

Hva scriptet ditt bør gjøre

  • Verifiser at forespørselen kommer fra denne listens offentlige IP.
  • Saniter p_resp og ip (stol aldri på rå input).
  • Bekreft at kontoen / karakteren finnes i databasen din.
  • Bruk din egen reward-cooldown hvis du trenger noe strengere enn 24 timer.
  • Gi poeng, coins eller items; logg hendelsen; returner HTTP 200.

postback.php-eksempel

Host dette på reward-nettstedet ditt, ikke nødvendigvis på denne stemmelisten. Sett VOTE_LIST_IP til denne nettsidens utgående offentlige IP før du går 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

Vi kan pushe stemmen rett inn i Minecraft-serveren din. Et listener-plugin kjører deretter reward-kommandoene dine.

Firewall: tillat innkommende TCP fra denne nettsidens offentlige IP til Votifier-porten din (standard 8192). Ikke eksponer porten for hele internett hvis du kan unngå det.

  1. Spilleren skriver Minecraft-brukernavnet sitt på stemmesiden vår (eller kommer via ?p=Steve).

  2. Stemmen lykkes på denne listen.

  3. Vi kobler til Votifier-host/port og leverer vote-pakken.

  4. Listeneren din gir crates, keys, penger osv.

Aktiver Votifier under Minecraft-detaljer, velg NuVotifier v2 eller Classic, og skriv inn host, port og token eller RSA public key.

Installer NuVotifier (classic RSA og protokoll v2) eller classic Votifier, pluss en listener for Minecraft-versjonen din (GAListener, SuperbVote eller en egen listener).

Classic / v1: lim inn hele public.key-filen. Host og port kommer fra config.yml. Hold debug: true mens du kobler til denne listen, og skru det av etterpå.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

Pakker identifiserer denne listen som: JoinGameServers

04

NuVotifier v2

Protokoll v2 erstatter RSA med et delt token og en engangs-challenge. Map et token til denne listens service-navn, eller bruk standard-tokenet.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

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

Symptom Sannsynlig årsak
Ikke en NuVotifier v2-server Greeting har ingen challenge — bruk Classic, eller oppgrader NuVotifier og aktiver v2.
Ugyldig signatur / ukjent service Feil token, eller service-navn ikke mappet. Legg til listens service-navn eller bruk default.
Tilkobling feilet / timeout Feil host/port, Votifier offline, eller firewall blokkerer denne listens IP.
Ingen respons Proxy/plugin-interferens; aktiver NuVotifier-debug og prøv igjen.
05

Test-sjekkliste

  1. Lagre listing-innstillinger uten valideringsfeil.
  2. Åpne en incentive-lenke — brukernavnfeltet skal forhåndsutfylles fra ?p=.
  3. Gi én stemme. Du skal se suksess-tilstanden. En ny stemme innen 24 timer må blokkeres.
  4. Verifiser postback: aktiver DEBUG i mottakeren; bekreft at p_resp og ip kommer frem.
  5. Verifiser Votifier: med debug true skal Minecraft-konsollen vise en innkommende stemme for brukernavnet ditt og denne listens service-navn.
  6. Bekreft in-game- eller site-reward. Hvis ikke, fiks listeneren — listestemmen teller fortsatt.

Leveringsforsøk lagres i vote_reward_logs (ok / fail / skipped). En mislykket callback ruller aldri tilbake stemmen på denne listen.

06

FAQ & feilsøking

Nei. Gjester kan stemme. Innloggede kontoer deler de samme 24-timers cooldown-reglene mot misbruk.

Hvis du har konfigurert en postback-URL eller Votifier, trenger vi en parameter for å fortelle deg hvem som skal belønnes. Uten rewards konfigurert forblir brukernavn valgfritt.

Ja. Begge kjører etter en vellykket stemme. Feil er uavhengige.

Den må være en offentlig http(s)-URL. Localhost, .local, private IP-er (f.eks. 10.*, 192.168.*) og URL-er med innebygde credentials blokkeres.

Bekreft at stemmen lyktes på denne listen. Sjekk postback-loggene eller NuVotifier-debug. Verifiser firewall-allowlists og at brukernavnet matcher en in-game-konto. Listens cooldown er 24 timer; din egen reward-cooldown kan være annerledes.

Bare A–Z, a–z, 0–9, _ og -. Alt annet strippes. Hold parametere ≤ 32 tegn.