Server sahipleri için: oy ödülü, rozet ve API
Kısaca: Serverini ücretsiz ekle, onaydan sonra oyuncuların sana https://mt2mobile.com/oy/avrasya2 adresinden oy verebilir. Bağlantıya ?pid=OyuncuAdi eklersen her oy imzalı bir istekle senin sunucuna bildirilir ve oyuncuna otomatik ödül verebilirsin. Callback kuramıyorsan aynı bilgiyi sorgu API'sinden çekebilirsin.
Başlarken
- Server ekle formunu doldur. Bilgileri kontrol edip genelde birkaç gün içinde yayına alıyoruz.
- Oy ödülü ya da API kullanacaksan iletişim formundan "Oy API" konusuyla yaz; callback adresini de ekle. Sana iki anahtar göndereceğiz: imza için
whs_ile başlayan gizli anahtar ve API içinmt2m_ile başlayan anahtar. - Mobil client'ın varsa Android/iOS bağlantılarını gönder. Kontrol edip server sayfana "Mobil doğrulandı" etiketi ekliyoruz.
- Oyun sunucunun adresini ve portunu (örneğin giriş portu) bildirirsen her 10 dakikada bir erişilebilirliğini kontrol ediyor, sayfanda çevrimiçi durumunu ve 7/30 günlük erişilebilirlik yüzdesini gösteriyoruz.
Oy bağlantısı
Her serverin oy sayfası şu biçimde: https://mt2mobile.com/oy/avrasya2. Oyunun içinden ya da sitenden oyuncuyu bu adrese gönder. Oy ödülü vereceksen oyuncunun hesap adını pid parametresiyle ekle:
https://mt2mobile.com/oy/avrasya2?pid={OYUNCU_ADI}
piden fazla 32 karakter olabilir: harf, rakam, nokta, alt çizgi ve tire. Uymayan değer yok sayılır.- Diğer toplistlerden taşınan bağlantılar bozulmasın diye
username,postbackveincentiveparametreleri depidgibi kabul ediliyor. - İsteğe bağlı
refparametresi (en fazla 250 karakter) olduğu gibi sana geri gönderilir; kampanya ya da kanal takibi için kullanabilirsin. - Aynı cihaz ve aynı oyuncu adı bir servere 24 saatte bir oy verebilir. Oylar her ayın 1'inde sıfırlanır, geçmiş aylar arşivde kalır.
Sitene oy rozeti koy
Rozet, serverinin bu ayki oy sayısını ve sırasını gösteren küçük bir görsel. Tıklayan oyuncu doğrudan oy sayfana gelir. Üç boyut var: 88x31, 468x60 (varsayılan) ve 300x250. Koyu tema için adresin sonuna &tema=koyu ekle. Her server sayfasının altında o servere özel hazır kod da var.
HTML
<a href="https://mt2mobile.com/oy/avrasya2" target="_blank" rel="noopener"><img src="https://mt2mobile.com/rozet/avrasya2?boyut=468x60" alt="Avrasya2 - mt2mobile'da oy ver" width="468" height="60"></a>
Forum (BBCode)
[url=https://mt2mobile.com/oy/avrasya2][img]https://mt2mobile.com/rozet/avrasya2?boyut=88x31[/img][/url]
Oy ödülü (callback) nasıl çalışır?
- Oyuncu
?pid=ile gelen bağlantıdan oy verir. - Oy kaydedildiği anda senin callback adresine
POSTisteği atarız. Gövde JSON, imza başlıkta. - Sen imzayı doğrular,
oy_iddaha önce işlenmediyse oyuncuna ödülünü verirsin ve2xxdönersin.
İstek
| Başlık | Değer |
|---|---|
Content-Type | application/json |
X-Mt2m-Imza | t=<unix zaman>,v1=<HMAC-SHA256> |
X-Mt2m-Olay | oy.verildi ya da panelden gönderilen test için oy.test |
X-Mt2m-Teslimat | Her teslimatın tekil kimliği (UUID) |
User-Agent | mt2mobile-oy-bildirimi/1 |
{
"olay": "oy.verildi",
"oy_id": "01JA9X5V3M2Q7K8T4R6N0BCDEF",
"sunucu_id": 42,
"sunucu": "server-adin",
"oyuncu": "KaraSura",
"ref": null,
"oy_zamani": 1760536800,
"sonraki_oy": 1760623200,
"ip_ozeti": "9f2c...e81a",
"deneme": 1
}
| Alan | Anlamı |
|---|---|
oy_id | Oyun tekil kimliği. Yeniden denemelerde aynı kalır; çift ödülü bununla engelle. |
oyuncu | Bağlantıdaki pid. Oyuncu ad yazmadan oy verdiyse null. |
ref | Bağlantıdaki ref, yoksa null. |
oy_zamani, sonraki_oy | Unix zaman damgası. Oyuncuya "bir sonraki oy" süresini göstermek için. |
ip_ozeti | Oy veren IP'nin senin anahtarınla üretilmiş özeti. IP'nin kendisini göndermiyoruz; aynı kişiden gelen oyları ayırt etmeye yeter. |
deneme | Kaçıncı gönderim olduğu. |
İmza nasıl doğrulanır?
Başlıktaki t değeri ile ham gövdeyi aralarına nokta koyarak birleştir ve gizli anahtarınla HMAC-SHA256 hesapla: hash_hmac('sha256', t + "." + gövde, anahtar). Sonuç v1 ile aynı olmalı. Tekrar oynatma saldırılarına karşı 5 dakikadan eski zaman damgalarını reddet. Karşılaştırmayı her zaman hash_equals gibi sabit süreli bir fonksiyonla yap.
Yeniden deneme
Zaman aşımı (5 saniye), bağlantı hatası, 429 ya da 5xx dönersen 1 dakika, 5 dakika, 30 dakika, 2 saat ve 6 saat sonra yeniden deneriz. Diğer 4xx yanıtlarında denemeyiz. Yönlendirmeleri takip etmiyoruz; callback adresin doğrudan https ve 443 portundan cevap vermeli. İç ağ adreslerine (127.0.0.1, 10.x, 192.168.x gibi) istek atmıyoruz.
Örnek PHP alıcısı
<?php
// mt2mobile oy ödülü alıcısı. Bu dosyayı sitende https ile açılan bir adrese koy
// ve adresi mt2mobile'a callback adresi olarak bildir.
const GIZLI_ANAHTAR = 'whs_BURAYA_SANA_VERILEN_ANAHTAR';
$govde = file_get_contents('php://input');
$imza = $_SERVER['HTTP_X_MT2M_IMZA'] ?? '';
// 1) İmzayı doğrula: t=<zaman>,v1=<hmac>
if (!preg_match('/^t=(\d+),v1=([a-f0-9]{64})$/', $imza, $m)) { http_response_code(400); exit; }
if (abs(time() - (int) $m[1]) > 300) { http_response_code(400); exit('eski istek'); }
$beklenen = hash_hmac('sha256', $m[1] . '.' . $govde, GIZLI_ANAHTAR);
if (!hash_equals($beklenen, $m[2])) { http_response_code(401); exit; }
$olay = json_decode($govde, true);
if (($olay['olay'] ?? '') !== 'oy.verildi') { exit('ok'); } // oy.test gibi olaylar
$oyuncu = $olay['oyuncu'] ?? '';
if (!preg_match('/^[A-Za-z0-9_.\-]{1,32}$/', $oyuncu)) { exit('ok'); }
// 2) Ödülü bir kez ver: oy_id tekrar gelirse (yeniden deneme) atla.
$db = new PDO('mysql:host=localhost;dbname=account;charset=utf8mb4', 'kullanici', 'sifre',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$db->beginTransaction();
try {
// oy_odulleri.oy_id sütunu UNIQUE olmalı
$db->prepare('INSERT INTO oy_odulleri (oy_id, login, tarih) VALUES (?, ?, FROM_UNIXTIME(?))')
->execute([$olay['oy_id'], $oyuncu, $olay['oy_zamani']]);
// Tablo ve sütun adlarını kendi veritabanına göre değiştir:
$db->prepare('UPDATE account SET coins = coins + 10 WHERE login = ?')->execute([$oyuncu]);
$db->commit();
} catch (PDOException $e) {
$db->rollBack();
if (($e->errorInfo[1] ?? 0) != 1062) { http_response_code(500); exit; } // 1062: zaten işlendi
}
echo 'ok';
Sorgu API'si
Sunucuna dışarıdan istek alamıyorsan (örneğin oyun içi bir görevden kontrol edeceksen) oyuncunun son 24 saatte oy verip vermediğini sorgulayabilirsin. Her istekte API anahtarını Authorization: Bearer ... başlığıyla gönder. Dakikada 120 istek sınırı var.
| Uç nokta | Ne yapar? |
|---|---|
GET /api/v1/oy-kontrol?pid=Ad | Oyuncunun son 24 saatteki oyunu döndürür. |
POST /api/v1/oy-kontrol/odul (pid=Ad) | Son oyu "ödül verildi" diye işaretler. İkinci istekte 409 döner, böylece aynı oy için iki kez ödül verilmez. |
GET /api/v1/sunucu | Serverinin toplam/aylık oyu, sırası ve çevrimiçi durumu. |
curl -H "Authorization: Bearer mt2m_SANA_VERILEN_API_ANAHTARI" \ "https://mt2mobile.com/api/v1/oy-kontrol?pid=KaraSura"
{
"oy_verdi": true,
"oy_id": "01JA9X5V3M2Q7K8T4R6N0BCDEF",
"oy_zamani": 1760536800,
"sonraki_oy": 1760623200,
"odul_alindi": false
}
Kurallar
- Bot, VPN ağı ya da ücretli oy hizmetiyle oy toplamak yasak. Fark ettiğimiz serverin oylarını sıfırlıyor, tekrarında listeden çıkarıyoruz.
- Oy karşılığı ödül vermek serbest; ödül her oyuncuya eşit olmalı, "en çok oy verdirene" türü yarışmalar sıralamayı bozduğu için yasak.
- Backlink karşılığı bonus oy vermiyoruz. Rozet koyman sıralamanı etkilemez; oyuncuların oy vermesini kolaylaştırır, o kadar.
- Sana gelen oy kayıtları ve oyuncu adları (
pid) sadece senin callback adresine ve senin API anahtarına açıktır; başka bir servere, site sahibinin kendi serveri dahil, verilmez. - Vitrin ücretli bir öne çıkarma alanıdır ve oy sıralamasını değiştirmez. Ayrıntılar reklam ver sayfasında.
Sıralamanın nasıl hesaplandığını ve doğrulama sürecini sıralama nasıl yapılıyor sayfasında ayrıntılı anlattık.