Integrare voturi

Metin2-Help înregistrează și validează votul. Website-ul serverului tău identifică jucătorul, acordă recompensa în sistemul propriu și confirmă procesarea. Nu trimitem credențiale de joc și nu modificăm monede sau iteme.

Ghid pentru Apache, Nginx, Laravel, WordPress și Cloudflare

Înscrierea, publicarea aprobată, votul, widgetul standard și API-ul de bază sunt gratuite. Nu există abonament.

  1. Înregistrează serverul — Contul autentificat completează formularul și îl trimite spre moderare sau îl păstrează ca ciornă.
  2. Verifică domeniul — Publică tokenul în fișierul /.well-known/metin2-help-verify.txt sau într-un TXT DNS. Moderatorul poate confirma manual.
  3. Primește aprobarea — Doar un server aprobat și cu proprietatea verificată poate genera cheia API.
  4. Generează cheia — Cheia se afișează o singură dată. O păstrezi pe server, nu în browserul jucătorilor.
  5. Instalează scriptul — Exemplul PHP creează intenția și, separat, citește voturile neconfirmate.
  6. Creează intenția — Website-ul tău trimite identificatorul jucătorului și primește un URL cu token opac. Tokenul expiră în 30 de minute.
  7. Trimite jucătorul — Jucătorul se autentifică pe Metin2-Help și votează. Deschiderea URL-ului nu este un vot.
  8. Verifică voturile — Interoghezi voturile neconfirmate cu cheia serverului.
  9. Acordă recompensa — O acorzi în baza sau în sistemul tău. Metin2-Help nu o acordă.
  10. Confirmă — Trimiți Vote ID-urile procesate. Aceeași confirmare repetată nu creează o a doua înregistrare.
  11. Reia la eroare — Dacă confirmarea nu ajunge, votul rămâne neconfirmat și îl poți relua. Nu promitem livrare exact o singură dată către joc.
  12. Rotește cheia — Rotirea revocă cheia veche imediat. Actualizezi scriptul înainte de următorul apel.

API

  • POST /api/v1/servers/{public_id}/vote-intents
  • GET /api/v1/vote-intents/{intent_id}
  • GET /api/v1/servers/{public_id}/votes/unclaimed
  • POST /api/v1/servers/{public_id}/votes/claim
  • GET /api/v1/servers/{public_id}/stats
  • GET /api/v1/servers/{public_id}/integration

Ce trebuie să instalez pe website-ul meu?

  1. Public ID-ul serverului, vizibil în editare.
  2. Cheia API, doar în momentul generării, păstrată în backend.
  3. Linkul de vot simplu, care poate sta într-un buton HTML și nu identifică jucătorul.
  4. Fluxul de vot cu recompensă, care are nevoie de backendul tău.
  5. Exemplul PHP, pe care îl adaptezi pentru recompensa locală.
  6. Endpointurile API de mai jos.
  7. Interogarea voturilor neconfirmate și confirmarea lor după ce recompensa locală a fost înregistrată.

Link de vot simplu

Poate fi pus într-un buton HTML. Nu conține identificatorul jucătorului și nu acordă automat o recompensă.

Vot cu recompensă

  1. Website-ul tău identifică jucătorul autentificat.
  2. Creează intenția prin API și primește vote_url.
  3. Redirecționează jucătorul către vote_url. Deschiderea nu este un vot.
  4. După vot, interoghezi voturile neconfirmate.
  5. Acorzi recompensa în sistemul tău și o notezi local pe Vote ID.
  6. Confirmi procesarea. O confirmare repetată nu creează o a doua înregistrare.

Răspunsul already_claimed arată doar că Metin2-Help a înregistrat confirmarea. Nu dovedește că recompensa locală a fost acordată. Jurnalul tău unic pe Vote ID este dovada. Dacă recompensa și jurnalul sunt în aceeași bază, ține-le în aceeași tranzacție. Dacă nu poți face asta atomic, reia din jurnal; nu promitem exact-once către joc.

Sisteme de tip Vote4Coins

Linkul Vote4Coins din pagina de integrare a serverului are forma https://metin2-help.com/api/vote/{public_id}/{token}/ID. Tokenul nu este cheia API. Înlocuirea lui ID deschide pagina pentru acel cont, dar nu creează intenția de vot și nu confirmă recompensa. Dacă ID rămâne neschimbat, votul nu este asociat unui jucător. Recompensa confirmată cere conexiunea avansată.

Unele website-uri acceptă doar un callback de forma https://website-ul-tau/api/vote4coins/callback/INDEX?username=PLAYER&key=SECRET. Acesta este un exemplu de formă, nu un endpoint Metin2-Help și nu conține o cheie reală.

Metin2-Help nu apelează automat un callback arbitrar furnizat de owner. API-ul actual folosește intenția de vot, votul validat, interogarea și confirmarea claim.

Un sistem care acceptă exclusiv callback URL are nevoie de un adaptor pe backendul ownerului sau de suport explicit pentru protocol. Metin2-Help nu modifică website-ul tău și nu accesează baza jocului.

PHP custom: scriptul de exemplu poate rula la cerere sau din cron. Laravel: același client HTTP într-o comandă programată. Cron: rulezi interogarea și confirmarea după ce jurnalul local a înregistrat recompensa.

Fără modificări în nucleul jocului poți păstra jurnalul și recompensa într-o bază separată pe care o controlezi. Livrarea în contul de joc rămâne codul tău.

Termeni diferiți

Vote URL. Pagina pe care jucătorul o deschide ca să voteze. La votul simplu este pagina publică. La votul cu recompensă este vote_url primit de backend, cu token opac.

API verification URL. Un endpoint pe care website-ul tău îl întreabă dacă un vot există. La Metin2-Help acesta este API-ul cu cheia în header, nu un URL care conține cheia.

Callback. O adresă pe domeniul tău, pe care un sistem extern ar apela-o după un vot. Metin2-Help nu apelează automat un callback ales de tine în alt software.

Postback. Același tip de apel invers, adesea prin GET sau POST către website-ul tău. Tabelul unui Vote4Coins poate afișa postback-ul propriu, nu linkul de vot pe care l-ai introdus.

Player ID. Identificatorul contului de pe website-ul serverului. În linkul Vote4Coins înlocuiește segmentul ID doar dacă website-ul face această înlocuire. În integrarea avansată, backendul îl trimite ca player_ref. Metin2-Help nu verifică existența lui în joc.

Username. Poate fi același lucru cu player_ref, dacă tu îl folosești ca identificator. Metin2-Help nu verifică existența lui în joc.

API key. Secretul cu care backendul tău se autentifică la Metin2-Help. Se arată o singură dată și nu intră în HTML.

Callback secret. Un secret al sistemului de pe website-ul tău. Nu este cheia API Metin2-Help și nu trebuie trimis către noi.

Vote Intent. Înregistrarea temporară care leagă un jucător de un vot care încă nu s-a întâmplat.

Claim. Confirmarea ta că ai procesat Vote ID-ul. Nu dovedește, singură, că recompensa a ajuns în joc.

Ce s-a putut stabili despre Vote4Coins

Numele Vote4Coins acoperă mai multe implementări, cu protocoale diferite. Nu există un singur contract public pe care Metin2-Help să îl poată declara compatibil.

Unele toplist-uri trimit un POST JSON către un callback configurat de owner, cu userid, timestamp și un hash. Altele cer ca website-ul ownerului să interogheze un API și să primească 0 sau 1. Altele generează, pe domeniul ownerului, câte un endpoint de callback pentru fiecare înregistrare.

Un tabel care arată adrese de forma https://website-ul-tau/api/vote4coins/callback/0?username={username}&key=SECRET afișează, după forma lor, endpointuri ale website-ului tău. Nu sunt linkurile de vot introduse și nu sunt endpointuri Metin2-Help. Chei diferite pentru înregistrări diferite sunt compatibile cu secrete generate local, câte unul pe rând.

Această observație nu a fost verificată în panoul unui website privat și nu s-a trimis nicio cerere către astfel de adrese. Nu o trata ca pe o descriere a tuturor instalărilor.

Metin2-Help nu apelează aceste callbackuri. Webhookul propriu este separat, opțional, oprit implicit, doar HTTPS și doar către adresa salvată în editarea serverului, cu semnătură HMAC. Nu înlocuiește un postback Vote4Coins.

Dacă instalarea ta poate apela un API HTTPS cu header X-API-Key, adaptezi backendul la contractul de mai sus. Dacă acceptă doar un postback primit la callbackul ei, ai nevoie de un adaptor pe website-ul tău: adaptorul verifică votul la Metin2-Help și abia apoi poate anunța sistemul local. Metin2-Help nu face acest apel.

Ca să știi ce poate instalarea ta, verifică în documentația ei: acceptă un client HTTP cu header propriu, doar un URL de vot, sau doar un postback primit. Fără acest detaliu nu se poate spune că integrarea funcționează.

Ce trebuie să copiez și unde?

A. Vreau doar voturi în clasament. Copiezi linkul public simplu sau un widget. Nu copiezi cheia API.

B. Am website PHP și pot modifica backendul. Pui cheia și Public ID-ul în configurația serverului, apoi folosești exemplul PHP: intenție, vote_url, voturi neconfirmate, recompensă locală, claim.

C. Am Vote4Coins și pot apela un API propriu. Backendul tău trebuie adaptat la contractul Metin2-Help. Nu lipi cheia într-un câmp de callback.

D. Am Vote4Coins care acceptă doar postback. Metin2-Help nu apelează acel postback. Fără un adaptor pe website-ul tău, recompensarea automată nu este disponibilă.

E. Nu am acces la codul website-ului. Poți lipi linkul Vote4Coins în câmpul existent. Dacă website-ul nu înlocuiește ID, votul nu este legat de un jucător. Recompensa confirmată rămâne la integrarea avansată.

Linkul Vote4Coins și identificatorul

Linkul se termină cu ID. Website-ul care înlocuiește ID deschide pagina pentru acel cont, dar nu creează o intenție de vot. Website-ul care lasă ID neschimbat nu asociază un jucător. Tokenul din link nu este cheia API. Recompensa confirmată rămâne la conexiunea avansată: intenție creată de website, vot confirmat și claim.

Vot simplu: jucătorul deschide pagina și votează, fără legătură cu un player ID.

Vot cu recompensă: website-ul tău creează intenția, iar recompensa se acordă doar la tine după confirmare.

POST /vote-intents

{
  "player_ref": "Hero.1",
  "idempotency_key": "player-hero-1-try"
}
{
  "intent_id": "0123456789abcdef01234567",
  "vote_url": "https://metin2-help.com/servere/{slug}/vot/{token}",
  "expires_at": "2026-11-14 02:00:00",
  "status": "pending"
}

POST /votes/claim

{ "vote_ids": [120] }
{ "data": [{ "vote_id": 120, "result": "claimed" }] }

401 înseamnă cheie lipsă sau greșită. 403 înseamnă alt server, server neaprobat sau proprietate neverificată. 404 este o intenție inexistentă. 422 este un identificator invalid. 429 este limita de ritm.

Webhookul este opțional și rămâne oprit până îl activezi. Semnătura este HMAC-SHA256 pe timestamp, nonce și corp. Pollingul rămâne metoda de recuperare. Nu trimitem către adrese interne.

Promovarea plătită nu este activă și nu schimbă ordinea voturilor.

Descarcă exemplul PHP

Descarcă exemplul PHP