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_NAMEVii 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âmp | Ce înseamnă |
|---|---|
userid | Numele jucătorului din linkul de vot |
userip | Adresa IP a votantului |
voted | 1 = votul a fost numărat. Dă recompensa doar la 1. |
reset | Momentul (timp Unix) de la care jucătorul poate vota din nou |
server | Slug-ul serverului tău |
vote_id | ID unic al votului. Păstrează-l, ca un vot să nu fie niciodată recompensat de două ori. |
timestamp | Momentul (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.