ŽebříčekNové ServeryVote Rewards API
ŽebříčekNové ServeryVote Rewards API
Login
Přidat
METIN2.GG
Login
Přidat

Kategorie

  • Metin2 PvP Servery
  • Metin2 PvM Servery
  • Metin2 Oldschool Servery
  • Metin2 Newschool Servery
  • Metin2 Low Rate Servery
  • Metin2 Mid Rate Servery
  • Metin2 High Rate Servery
  • Metin2 Middleschool Servery
  • Metin2 Easy Servery
  • Metin2 Hard Servery

Nejlepší Seznamy

  • Nejlepší Soukromé Servery Metin2 v 2026
  • Metin2 PServer 2026
  • Metin2 PServer Seznam 2026
  • Metin2 Toplist 2026
  • Metin2 Seznam Serverů 2026
  • Metin2 Soukromý Server Žebříček 2026
  • Nové Metin2 Soukromé Servery v 2026
  • Nejhlasovanější Metin2 Servery v 2026
  • Metin2 Servery Otevírající se Dnes
  • Metin2 Servery Otevírající se Tento Týden
  • Metin2 Servery 2026
  • Metin2 PvP Server 2026
  • Metin2 Middleschool Server 2026
  • Metin2 Privátní Server 2026
  • MT2 PServer 2026

Rychlé Odkazy

  • Žebříček serverů
  • Přidat server
  • Vote Rewards API
  • PvP servery
  • Oldschool servery
  • Nové servery 2026
  • Blog
  • Nejlepší české Metin2 servery 2026
METIN2.GG

© 2026 Metin2.gg — Není spojeno s Webzen Inc.

O NásOchrana SoukromíKontaktPodmínky
Domů/Vote Rewards/Průvodce Integrací

Průvodce Integrací API Vote Rewards

Vše, co potřebujete pro připojení vašeho serveru Metin2 k systému Vote Rewards metin2.gg — s kódem připraveným ke zkopírování pro každou běžnou konfiguraci.

Jak To Funguje

API Vote Rewards od metin2.gg umožňuje vašemu serveru Metin2 automaticky detekovat, kdy hráči hlasují, a udělovat odměny ve hře. Postup je jednoduchý: hráči hlasují na metin2.gg se svým jménem postavy a váš server dotazuje naše API pro ověření a nárokování těchto hlasů.

Existují dva režimy integrace — vyberte ten, který vyhovuje vašemu nastavení:

Player
Votes on metin2.gg
metin2.gg
Records vote
Your Server
Grants reward

Polling (Doporučeno)

Váš server pravidelně volá naše API pro kontrolu nových hlasů. Nejjednodušší implementace — funguje s jakýmkoliv nastavením serveru Metin2. Stačí přidat jeden HTTP požadavek do kódu vašeho herního serveru.

Webhooks (Pokročilé)

metin2.gg odešle notifikaci na váš server v okamžiku, kdy hráč hlasuje. V reálném čase, ale vyžaduje veřejně přístupný HTTPS endpoint na vaší straně.

Autentizace

Všechny API požadavky vyžadují API klíč odeslaný prostřednictvím hlavičky X-API-Key. Klíče mají formát mg_live_... a generují se z panelu vašeho serveru.

HTTP
X-API-Key: mg_live_5bef...1a70

Váš API klíč je vázán na jeden server a zobrazí se pouze jednou při generování. Pokud ho ztratíte, vygenerujte nový z panelu (starý klíč je okamžitě zneplatněn).

Jak Získat Svůj API Klíč

  1. 1Přejděte do Můj Panel → Moje Servery. Klikněte na název svého serveru pro otevření stránky správy.
  2. 2Na stránce správy ověřte vlastnictví (DNS TXT záznam nebo meta tag), pokud jste tak ještě neučinili.
  3. 3Přidejte zpětný odkaz na metin2.gg na web svého serveru pro odemknutí statusu Partner.
  4. 4Na stránce správy svého serveru klikněte na tlačítko "Nastavení API". Poté klikněte na "Vygenerovat API Klíč" a zkopírujte ho — zobrazí se pouze jednou.
Přejít do PaneluJeště nemáte server? Odešlete jeden

Kontrola Stavu Hlasu

Zkontrolujte, zda konkrétní hráč má nenárokovaný hlas. Pokud existuje čekající hlas, je automaticky nárokován (označen jako použitý), takže stejný hlas nelze nárokovat dvakrát.

HTTP
GET /api/v1/vote/check?player_id=PlayerName HTTP/1.1
Host: metin2.gg
X-API-Key: mg_live_YOUR_KEY_HERE

Parametry Dotazu

ParameterTypeRequiredDescription
player_idstringYesJméno postavy, které hráč použil při hlasování. Nerozlišuje velká a malá písmena.

Odpověď

Hráč má nenárokovaný hlas (nyní nárokován)

JSON
{
  "voted": true,
  "player_id": "PlayerName",
  "vote_id": "550e8400-e29b-41d4-a716-446655440000",
  "voted_at": "2026-03-02T14:30:00Z"
}

Žádný čekající hlas pro tohoto hráče

JSON
{
  "voted": false
}

Seznam Nenárokovaných Hlasů

Získejte všechny nenárokované hlasy pro váš server. Užitečné pro dávkové zpracování — například cron úloha běžící každých 5 minut, která udělí odměny za všechny čekající hlasy najednou.

HTTP
GET /api/v1/vote/unclaimed?limit=50 HTTP/1.1
Host: metin2.gg
X-API-Key: mg_live_YOUR_KEY_HERE

Parametry Dotazu

ParameterTypeRequiredDescription
limitintegerNoMaximální počet vrácených hlasů (1–100, výchozí 50).

Odpověď

JSON
{
  "votes": [
    {
      "vote_id": "550e8400-e29b-41d4-a716-446655440000",
      "player_id": "PlayerName",
      "voted_at": "2026-03-02T14:30:00Z"
    },
    {
      "vote_id": "660e8400-e29b-41d4-a716-446655440001",
      "player_id": "AnotherPlayer",
      "voted_at": "2026-03-02T14:32:00Z"
    }
  ],
  "total": 2
}

Dávkové Nárokování Hlasů

Označte více hlasů jako nárokované v jednom požadavku. Použijte po zpracování hlasů z endpointu unclaimed.

HTTP
POST /api/v1/vote/claim HTTP/1.1
Host: metin2.gg
Content-Type: application/json
X-API-Key: mg_live_YOUR_KEY_HERE

{
  "vote_ids": [
    "550e8400-e29b-41d4-a716-446655440000",
    "660e8400-e29b-41d4-a716-446655440001"
  ]
}

Tělo Požadavku (JSON)

ParameterTypeRequiredDescription
vote_idsstring[]YesPole UUID hlasů k nárokování. Maximum 100 na požadavek.

Odpověď

JSON
{
  "claimed": 2,
  "failed": 0
}

Webhooks

Místo pollingu můžete přijímat push notifikace v reálném čase, když hráč hlasuje. Nakonfigurujte URL webhooku v panelu serveru pod Nastavení API.

Payload Webhooku

HTTP
POST https://your-server.com/api/vote-webhook HTTP/1.1
Content-Type: application/json
X-Metin2GG-Signature: a1b2c3d4e5f6...

{
  "event": "vote.created",
  "vote_id": "550e8400-e29b-41d4-a716-446655440000",
  "server_id": "your-server-uuid",
  "player_id": "PlayerName",
  "voted_at": "2026-03-02T14:30:00Z",
  "timestamp": "2026-03-02T14:30:01Z"
}

Ověření Podpisu

Každý webhook požadavek obsahuje hlavičku X-Metin2GG-Signature s hex digestem HMAC-SHA256 surového těla požadavku, podepsaným vaším API tajemstvím. Vždy ověřte tento podpis, než budete payloadu důvěřovat.

Pythonverify_webhook.py
import hmac
import hashlib

def verify_webhook(request_body: bytes, signature: str, secret: str) -> bool:
    """Verify the X-Metin2GG-Signature header."""
    expected = hmac.new(
        secret.encode("utf-8"),
        request_body,
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

# Usage in your webhook handler:
# body = request.body  (raw bytes)
# sig  = request.headers["X-Metin2GG-Signature"]
# if not verify_webhook(body, sig, "your_api_secret"):
#     return HttpResponse(status=403)
PHPverify_webhook.php
<?php
function verifyWebhook(string $body, string $signature, string $secret): bool {
    $expected = hash_hmac('sha256', $body, $secret);
    return hash_equals($expected, $signature);
}

// Usage in your webhook handler:
// $body = file_get_contents('php://input');
// $sig  = $_SERVER['HTTP_X_METIN2GG_SIGNATURE'] ?? '';
// if (!verifyWebhook($body, $sig, 'your_api_secret')) {
//     http_response_code(403);
//     exit('Invalid signature');
// }

Integrace Metin2: Python Příkaz

Umístěte tento skript do příkazového systému Python vašeho herního serveru. Když hráč napíše /reward ve hře, zkontroluje metin2.gg na čekající hlas a udělí odměnu.

Pythonvote_reward.py
# vote_reward.py — Drop into your game server's command scripts
# Works with Python 2.7+ (common in Metin2 servers)
import json
import os

METIN2GG_API_KEY = "mg_live_YOUR_KEY_HERE"
METIN2GG_API_URL = "https://metin2.gg/api/v1/vote/check"

def check_vote(player_name):
    """Check if player has a pending vote and auto-claim it."""
    url = "%s?player_id=%s" % (METIN2GG_API_URL, player_name)

    # Method 1: Use urllib2 (Python 2) or urllib.request (Python 3)
    try:
        try:
            import urllib2
            req = urllib2.Request(url)
            req.add_header("X-API-Key", METIN2GG_API_KEY)
            resp = urllib2.urlopen(req, timeout=5)
            data = json.loads(resp.read())
        except ImportError:
            import urllib.request
            req = urllib.request.Request(url)
            req.add_header("X-API-Key", METIN2GG_API_KEY)
            resp = urllib.request.urlopen(req, timeout=5)
            data = json.loads(resp.read().decode("utf-8"))

        return data.get("voted", False)
    except Exception:
        pass

    # Method 2: Fallback to curl (works even with broken SSL)
    try:
        cmd = 'curl -s -H "X-API-Key: %s" "%s"' % (METIN2GG_API_KEY, url)
        raw = os.popen(cmd).read()
        data = json.loads(raw)
        return data.get("voted", False)
    except Exception:
        return None

# Example usage in your game command handler:
# def cmd_reward(player):
#     result = check_vote(player.GetName())
#     if result is True:
#         player.GiveItem(50011, 10)  # Example: 10x Dragon God Coins
#         player.ChatInfoMessage("Vote reward claimed!")
#     elif result is False:
#         player.ChatInfoMessage("No pending vote. Vote at metin2.gg!")
#     else:
#         player.ChatInfoMessage("Could not reach metin2.gg. Try again.")

Integrace Metin2: Quest Soubor (Lua)

Tento quest soubor vytváří NPC interakci, kde hráči mohou zkontrolovat stav svého hlasování. Volá příkaz na straně serveru, který spouští Python kontrolu hlasu.

Luavote_reward.quest
quest vote_reward begin
    state start begin
        when login or letter begin
            send_letter("Vote Reward")
        end

        when button or info begin
            say_title("Vote Reward")
            say("")
            say("Vote for our server on metin2.gg")
            say("and claim your reward here!")
            say("")

            local s = select("Check My Vote", "How to Vote", "Close")

            if s == 1 then
                -- Triggers the Python command that checks the API
                cmdchat("checkvote "..pc.get_name())
            elseif s == 2 then
                say_title("How to Vote")
                say("")
                say("1. Open metin2.gg in your browser")
                say("2. Find our server page")
                say("3. Enter your character name")
                say("4. Click the Vote button")
                say("5. Come back here to claim your reward!")
                say("")
            end
        end
    end
end

Integrace Metin2: PHP Web Panel

Pokud má váš server webový panel (na bázi PHP), použijte tento kód pro kontrolu a nárokování hlasů z panelu. Funguje s jakýmkoliv prostředím PHP 7+ s cURL.

PHPcheck_vote.php
<?php
/**
 * check_vote.php — Vote check for PHP-based web panels
 * Requires PHP 7.0+ with cURL extension
 */

$apiKey    = "mg_live_YOUR_KEY_HERE";
$playerName = $_GET["player"] ?? "";

if (empty($playerName)) {
    echo json_encode(["error" => "Missing player name"]);
    exit;
}

// Check vote status
$ch = curl_init(
    "https://metin2.gg/api/v1/vote/check?player_id=" . urlencode($playerName)
);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => ["X-API-Key: $apiKey"],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 10,
    CURLOPT_SSL_VERIFYPEER => true,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode !== 200) {
    echo json_encode(["error" => "API returned HTTP $httpCode"]);
    exit;
}

$data = json_decode($response, true);

if ($data["voted"] ?? false) {
    // Player has voted — grant reward via your game DB
    // Example: INSERT INTO player.reward_queue (player, item_vnum, count) ...
    echo json_encode([
        "success" => true,
        "message" => "Vote reward granted!",
        "vote_id" => $data["vote_id"],
    ]);
} else {
    echo json_encode([
        "success" => false,
        "message" => "No pending vote found.",
    ]);
}

Rychlostní Limity a Chybové Kódy

API vynucuje rychlostní limity pro zajištění spravedlivého používání. Aktuální limity:

  • 60 requests per minute per API key
  • 1,000 requests per hour per API key
StavPopis
200 OKPožadavek úspěšný.
400 Bad RequestChybějící nebo neplatné parametry. Zkontrolujte formát player_id nebo vote_ids.
401 UnauthorizedChybějící nebo neplatný API klíč. Ujistěte se, že zahrnujete hlavičku X-API-Key.
403 ForbiddenPřístup k API je zakázán — obvykle proto, že zpětný odkaz byl odstraněn. Přidejte zpětný odkaz zpět a zkontrolujte.
404 Not FoundEndpoint neexistuje. Znovu zkontrolujte cestu URL.
429 Too Many RequestsRychlostní limit překročen. Počkejte a opakujte po hodnotě hlavičky Retry-After (v sekundách).
500 Internal Server ErrorNa naší straně se něco pokazilo. Opakujte po několika sekundách.

Strategie Opakování

On 429 errors, read the Retry-After header (value in seconds) and wait before retrying. For 500 errors, retry with exponential backoff (1s, 2s, 4s).

Často Kladené Dotazy - Řešení Problémů

Při každém požadavku dostávám 401 Unauthorized

Ujistěte se, že posíláte API klíč v hlavičce X-API-Key (ne jako parametr dotazu nebo v těle). Klíč musí začínat mg_live_.

API říká voted: false, ale hráč tvrdí, že hlasoval

Hráč mohl hlasovat bez zadání jména postavy nebo použil jiné jméno. Zkontrolujte URL odkazu pro hlasování — musí obsahovat ?player_id=PŘESNÉ_JMÉNO. Jména nerozlišují velká a malá písmena.

Dostávám 403 Forbidden

Váš přístup k API je pozastaven, pravděpodobně proto, že zpětný odkaz na metin2.gg byl odstraněn z vašeho webu. Přidejte ho zpět a klikněte na 'Zkontrolovat Nyní' v panelu pro opětovné ověření.

Mohu testovat API bez skutečných hlasů?

Momentálně neexistuje sandbox režim. Hlasujte na svém vlastním výpisu serveru s testovacím jménem postavy pro ověření integrace od začátku do konce.

Můj Python skript se nemůže připojit (timeout nebo SSL chyba)

Většina Metin2 serverů používá Python 2.7 s zastaralými SSL certifikáty. Použijte záložní os.popen('curl ...') ukázaný v Python příkladu, nebo aktualizujte Python CA balíček vašeho serveru.

Jak často bych měl pollovat API?

Pro endpoint /check (na hráče): volejte ho, když hráč požádá o odměnu (např. příkaz /reward). Pro /unclaimed (dávkově): každých 3–5 minut přes cron je ideální. Nepollujte častěji než jednou za minutu.

Mohou více serverů sdílet jeden API klíč?

Ne. Každý API klíč je vázán na jeden výpis serveru. Pokud provozujete více serverů, vygenerujte pro každý zvláštní klíč z příslušných stránek panelu.

Co se stane, když je můj webhook endpoint nedostupný?

metin2.gg opakuje neúspěšné doručení webhooků až 5krát s exponenciálním zpožděním. Pokud všechny pokusy selžou, hlas zůstane nenárokovaný a stále ho lze získat prostřednictvím polling endpointů.

Připraveni na Integraci?

Přidejte svůj server na metin2.gg, vygenerujte API klíč a začněte odměňovat hlasující během minut.

Odeslat Svůj ServerPřejít do Panelu

Obsah

  • Jak To Funguje
  • Autentizace
  • Kontrola Stavu Hlasu
  • Seznam Nenárokovaných Hlasů
  • Dávkové Nárokování Hlasů
  • Webhooks
  • Integrace Metin2: Python Příkaz
  • Integrace Metin2: Quest Soubor (Lua)
  • Integrace Metin2: PHP Web Panel
  • Rychlostní Limity a Chybové Kódy
  • Často Kladené Dotazy - Řešení Problémů