Sari la conținut

API de recompense pentru vot

Dă-le jucătorilor o recompensă în joc când votează serverul tău. Folosește callback-ul (te apelăm noi), verificarea Vote4Buff sau pull API-ul (ne întrebi tu), ori mai multe dintre ele.

Linkul de vot

Trimite jucătorii la acest link, cu numele lor din joc în userid:

https://metin2privateservers.com/vote/YOUR-SERVER-SLUG?userid=PLAYER_NAME

Vii de pe alt top? Nu trebuie să-ți schimbi parametrul. Citim și username, player_id, pingUsername, custom, postback, incentive și id. Numele pot conține litere, cifre, - și _, maximum 32 de caractere.

Callback (postback)

Setează un URL de callback în panoul tău. După fiecare vot care are un nume de jucător, trimitem o cerere GET la acel URL, cu aceste câmpuri adăugate în query string:

CâmpCe înseamnă
useridNumele jucătorului din linkul de vot
useripAdresa IP a votantului
voted1 = votul a fost numărat. Dă recompensa doar la 1.
resetMomentul (timp Unix) de la care jucătorul poate vota din nou
serverSlug-ul serverului tău
vote_idID unic al votului. Păstrează-l, ca un vot să nu fie niciodată recompensat de două ori.
timestampMomentul (timp Unix) în care a fost trimis callback-ul

Fiecare cerere are un header X-Signature: sha256=…: un HMAC-SHA256 al câmpurilor de vot de mai sus (în această ordine, codate URL) calculat cu secretul tău de callback. Verifică-l, ca nimeni să nu poată falsifica voturi apelând URL-ul tău. Reîncercăm de cel mult 3 ori dacă serverul tău nu răspunde cu un status 2xx. Dacă URL-ul tău conține {userid}, îl înlocuim cu numele jucătorului, pentru scripturile care așteaptă numele în cale.

Exemplu de handler în PHP:

<?php
// vote-callback.php on your server
$secret = 'YOUR_CALLBACK_SECRET';           // from your dashboard

$query = $_SERVER['QUERY_STRING'];
// The signature covers the vote fields, which are always appended last.
$fields = ['userid','userip','voted','reset','server','vote_id','timestamp'];
$parts = [];
foreach ($fields as $f) { $parts[] = $f . '=' . rawurlencode($_GET[$f] ?? ''); }
$signed = implode('&', $parts);
$expected = 'sha256=' . hash_hmac('sha256', $signed, $secret);
$given = $_SERVER['HTTP_X_SIGNATURE'] ?? '';

if (!hash_equals($expected, $given)) { http_response_code(403); exit('bad signature'); }
if (($_GET['voted'] ?? '0') !== '1') { exit('ignored'); }
if (abs(time() - (int)$_GET['timestamp']) > 300) { http_response_code(400); exit('too old'); }

$player = $_GET['userid'];
$voteId = (int)$_GET['vote_id'];
// TODO: skip if $voteId was already rewarded, then give the reward to $player.
echo 'ok';

Folosește butonul Trimite un vot de test din panou ca să trimiți un callback pentru jucătorul TEST și să vezi ce răspunde serverul tău.

Verificarea Vote4Buff

Fiecare vot îi dă jucătorului un buff care ține 7 zile, până când poate vota din nou. Întreabă dacă buff-ul unui jucător e activ când se loghează sau deschide NPC-ul de buff:

GET https://metin2privateservers.com/api/v1/vote4buff?userid=PLAYER_NAME
X-API-Key: YOUR_API_KEY

{"userid":"PLAYER_NAME","voted":true,"buff_active":true,"vote_id":1234,
 "voted_at":"2026-11-09T18:02:11.000Z","buff_expires_at":"2026-11-16T18:02:11.000Z",
 "next_vote_at":"2026-11-16T18:02:11.000Z","seconds_left":604700}

{"userid":"PLAYER_NAME","voted":false,"buff_active":false,"vote_url":"/vote/your-server?userid=PLAYER_NAME"}

Cel mult 600 de cereri pe minut pentru fiecare server. Voturile marcate ca fraudă de moderatori nu mai dau buff.

Pull API

Preferi să întrebi tu în loc să fii apelat? Trimite cheia API în header-ul X-API-Key.

A votat acest jucător?

GET https://metin2privateservers.com/api/v1/votes/check?userid=PLAYER_NAME

{"voted":true,"userid":"PLAYER_NAME","vote_id":1234,"claimed":false,
 "voted_at":"2026-11-09T18:02:11.000Z","next_vote_at":"2026-11-10T06:02:11.000Z"}

Voturi încă nerecompensate

GET https://metin2privateservers.com/api/v1/votes/unclaimed?limit=50

{"votes":[{"vote_id":1234,"userid":"PLAYER_NAME","created_at":"2026-11-09T18:02:11.000Z"}]}

Marchează voturile ca recompensate

POST https://metin2privateservers.com/api/v1/votes/claim
Content-Type: application/json

{"vote_ids":[1234,1235]}

{"claimed":[1234,1235],"already_claimed_or_unknown":[]}

Rulează unclaimed și apoi claim în fiecare minut dintr-un cron job, ca recompensele să fie date exact o dată.

Limite

  • Un vot pe jucător la fiecare 7 zile pentru fiecare server, verificat după IP și după numele jucătorului.
  • Fiecare vot cere literele dintr-o imagine (captcha).
  • Pull API-ul întoarce voturile din ultimele 7 zile.