Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hata referansı

Bu sayfa, Open Play’in döndürdüğü her hata türünü, durum kodunu ve gövde biçimini listeler. Hata yönetimi kodu yazarken önce hangi uç ailesinin (çekirdek REST mi, eklenti mi) çağrıldığına bakın: iki ailenin hata gövdesi farklıdır.

Uyarı

Çekirdek REST uçlarının çoğu düz metin (text/plain) hata döner, JSON değil. Yalnız bu sayfada “JSON” diye işaretlenen birkaç hata JSON zarfı taşır. Hata metnini ayrıştırmayın; durum koduna ve (varsa) JSON code alanına göre karar verin. Düz metin mesajlar sürümler arasında değişebilir.

Hata aileleri

AileHangi uçlarGövde
Çekirdek REST/v1/characters…, /v1/wallets…, /v1/store…, /v1/auth/… vb. (uç noktalar)Düz metin; birkaç hata JSON {code, message[, module]}
Eklenti/v1/plugins/…Her zaman JSON {code, message, retryable, requestId[, reason, module]} + x-request-id başlığı
Realtime/v1/realtime/wsError çerçevesi: {type, requestId?, code, retryable} (protokol)
Sohbet soketi/v1/chat/ws{"type":"error","code":"…"} (realtime genel bakış)

Çekirdek REST: durum tablosu

DurumGövde (düz metin, aksi belirtilmedikçe)Ne zamanYeniden dene?
400Hatanın açıklamasıEksik ya da bozuk başlık, geçersiz alan, bilinmeyen komut türü, If-Match biçimiHayır; isteği düzeltin
401unauthorizedAPI anahtarı ya da oyuncu oturumu yok, geçersiz, süresi dolmuş; x-crx-env yok ya da bozuk; yasaklı hesap (ayrım yapılmaz)Hayır; kimliği yenileyin
403permission deniedAnahtar türü yetmiyor (ör. istemci anahtarıyla sunucu ucu), CSRF ya da Origin reddiHayır
403JSON {"code":"account_banned","message":"account banned"}Giriş uçlarında, sahiplik kanıtlandıktan sonra yasaklı hesapHayır; döngü kurmayın
404not foundKaynak yok ya da silinmişHayır
404JSON {"code":"module_disabled","message":"module disabled","module":"store"}Ürün modülü ortamda kapalıHayır; modülü açın (modüller)
409version conflict: expected 3, actual 5If-Match sürümü gerçekle uyuşmuyorDurumu yeniden okuyup yeni sürümle tekrar edin
409already exists: <kaynak>Aynı kimlik/anahtarla kaynak zaten varHayır
409idempotent request in progressAynı Idempotency-Key ile ilk istek hâlâ işleniyorEvet, kısa süre sonra aynı anahtarla
410idempotent request result expiredAnahtarın kayıt süresi (24 saat) dolduYeni anahtarla, durumu önce okuyarak
413Gövdesizİstek gövdesi 2 MiB sınırını aştı (görsel yükleme ucu kendi sınırına tabidir)Hayır
422idempotency mismatchAynı anahtar, farklı içerikHayır; anahtarı yeniden kullanmayın
422unprocessable: <neden>İş kuralı reddi (yetersiz bakiye, stok, limit…)Hayır; durumu değiştirmeden tekrar etmeyin
422rejected: <kod>Eklenti iş kuralı reddi (çekirdek rotalar üzerinden)Hayır
429rate limited ya da rule budget exceeded: <kural>Oran sınırı ya da kural bütçesiEvet, bekleyerek (hız sınırları); Retry-After yoktur
500internal errorBeklenmeyen sunucu hatası; ayrıntı sızdırılmazEvet, sınırlı
503tenant unavailable; başlık Retry-After: 30Ortamın yerleşimi taşınıyor ya da geçici kullanılamıyorEvet, Retry-After sonra

Notlar:

  • Gövde ayrıştırma hatalarında çıkarıcıya göre 415 (yanlış Content-Type) ya da 422 (şemaya uymayan JSON) da görülebilir. Karar için yalnız durum koduna güvenin.
  • 401 ve 403 farkı: kimlik yok ya da çözümlenemiyorsa 401; kimlik geçerli ama bu işleme yetmiyorsa 403. Oyuncu bilet ucunda tüm kimlik hataları 403 döner (realtime protokolü).
  • İstemci anahtarıyla bir sunucu ucunu çağırırsanız 403 permission denied alırsınız; anahtarın bilinmemesi ise 401’dir.

Satın alma (POST /v1/player/store/listings/{listing_id}/buy) hata kodları

Oyuncu satın alma ucu, ret nedenini JSON code ile söyler: {"code":"out_of_stock","message":"…"} (message ayrıntı metnidir, kararınızı code’a göre verin).

codeDurumAnlam
not_visible404İlan yok ya da bu oyuncuya görünmüyor
listing_changed409İlanın sürümü (expected_version) değişti; kataloğu yenileyip yeniden gösterin
out_of_stock422Stok bitti
limit_reached422Oyuncu başına satın alma sınırı doldu
insufficient_funds422Bakiye yetmiyor
inventory_full422Envanter dolu

Bunun dışındaki hatalar (400 başlık/gövde, 401, 403 Origin ya da CSRF, idempotency uyuşmazlığı 422) yukarıdaki genel tablodaki gibidir. IAP ilanı bu uçtan alınamaz (422). Ayrıntı: mağaza rehberi.

Eklenti uçları

Eklenti uçları JSON zarf döner; requestId değerini destek taleplerinde iletin (aynı değer x-request-id başlığında da bulunur).

{"code":"unprocessable","message":"plugin command rejected","retryable":false,"requestId":"0192a3b4-0000-7000-8000-0000000000d1","reason":"street_reset_too_early"}
codeDurumretryableNot
unauthorized401hayırOturum/anahtar yok ya da geçersiz; istemci anahtarı
forbidden403hayırCSRF/Origin reddi; eklenti etkin değil; sürüm yetkisi uyuşmuyor; yasaklı hesap (message: account banned)
module_disabled404hayırmodule alanı kapalı modülü söyler
not_found404hayırBilinmeyen eklenti ya da mesaj türü
invalid_argument400hayırBozuk/eksik başlık, bilinmeyen şema sürümü, şemaya uymayan yük
conflict409hayırIf-Match sürümü uyuşmuyor
idempotency_in_flight409evetAynı anahtarlı istek işleniyor
idempotency_mismatch422hayırAynı anahtar, farklı gövde
unprocessable422hayırİş kuralı reddi; reason eklentiye özgü makine kodudur
idempotency_expired410hayırKayıt süresi doldu
rate_limited429evetRetry-After: 60
tenant_unavailable503evetRetry-After: 30
internal500evet

Ayrıntı ve örnekler: eklentileri çağırma.

Not

Eklenti ucunda yasaklı hesap, çekirdek kimlik uçlarının aksine account_banned koduyla gelmez: 403, forbidden ve message: "account banned" döner. Bu ayrıma yalnız bir kullanıcı arayüzü mesajı için ihtiyaç duyarsınız; yeniden deneme döngüsü kurmayın.

Çekirdek ile eklenti arasındaki farklar

Çekirdek RESTEklenti
GövdeDüz metin (birkaç JSON istisna)Daima JSON
Makine koduYalnız JSON olan hatalardaHer hatada code
retryableYok; durum koduna göre karar verinVar
Yeniden deneme süresiYalnız 503 (30 sn)429 (60 sn) ve 503 (30 sn)
Yasaklı hesap403 account_banned (giriş uçlarında)403 forbidden
x-request-idYokVar

Hata işleme önerisi

  1. Önce durum koduna bakın; 401 oturumu yenileyin ya da yeniden giriş yaptırın, 403 yetki ya da yapılandırma sorunudur (anahtar türü, CSRF, modül, eklenti durumu).
  2. 404 için gövdeyi okuyun: JSON ve module_disabled ise modül kapalıdır, yoksa kaynak yoktur.
  3. 409’u iki ayrı biçimde ele alın: sürüm çakışması (durumu yeniden okuyun) ile idempotency “işleniyor” (bekleyip aynı anahtarla tekrar edin).
  4. 429 ve 503’te üstel geri çekilme kullanın; Retry-After varsa onu bekleyin (idempotency ve eşzamanlılık sayfasındaki örnek).
  5. 422 iş kuralı reddidir; aynı isteği olduğu gibi tekrarlamak sonuç değiştirmez.
  6. Sunucu hata ayrıntısı sızdırmaz; sorun bildirirken durum kodunu, istek zamanını ve (eklenti uçlarında) requestId’yi iletin (sorun giderme).