Cüzdan
Genel Bakış

Cüzdan

Cüzdan, kendi markanız altında program-içi hesaplar işletmenizi sağlar: müşterileriniz bakiye yükler, birbirine gönderir, sizden alışveriş yapar, QR ile öder, puan ve cashback kazanır. Bakiye tek bir defter (double-entry ledger) üzerinde tutulur; her hareket bir operasyon kaydı ve denetim izi üretir.

Tüm tutarlar minor-unit (kuruş) tam sayıdır ve string olarak taşınır: "amount": "10050" = ₺100,50. Cüzdan API'sinde hiçbir yerde ondalıklı ya da float tutar yoktur.

Üç yüzey

Aynı iş yeteneği üç ayrı yüzeyde, farklı yetki genişliğiyle açılır. Uçlar ayrı controller'lardır; tek bir uç üç farklı kimlikle paylaşılmaz.

YüzeyKim çağırırPathKimlik doğrulamaUç
Dış API (s2s)Sizin backend'iniz/api/v1/wallet/*Her istek Ed25519 ile imzalanır — imzanın kendisi kimliktir, Bearer'a çevrilmez60
Portal / SDKSon kullanıcının mobil/web uygulaması/api/portal/v1/wallet/*Publishable key → OTP → müşteri oturumu (JWT)87
Merchant panelSizin operasyon ekibiniz/api/panel/v1/wallet/*Panel oturumu (JWT) + RBAC + dört-göz186

Örnek: "işlem listesi" üç yüzeyde de vardır ama s2s tenant'ın tüm işlemlerini, panel tüm işlemleri (PII maskeli), portal yalnızca oturum sahibinin kendi işlemlerini döndürür.

⚠️

Yüzeyler birbirinin yerine geçmez: panelin 139 ucunun s2s API'de karşılığı yoktur, yani kendi merchant panelinizi imza anahtarıyla yazamazsınız. Ölçülmüş karşılaştırma: yüzey karşılaştırma matrisi.

Ne yapabilirsiniz

YetenekAçıklamaDurum
Program & markaKendi cüzdan programınız: para birimleri, marka, ücret ve limit politikası✅
Son kullanıcı & hesapBireysel (PERSONAL) ve işletme (BUSINESS) kullanıcılar, çoklu para birimi hesapları✅
Kart ile yüklemeKartla bakiye yükleme — ödeme altyapısına delege edilir, 3D Secure dahil✅
Temsilci ile yüklemeBayi/temsilci nakit alır, float hesabından müşteriye kredi geçer✅
Cüzdandan cüzdana transferTelefon veya cüzdan numarasıyla gönderim, OTP'li onay✅
Cüzdanla ödemeMüşteri → işletme ödemesi, komisyon ve kasiyer referansı✅
QRQR üretme, okuma, QR ile tahsilat ve ödeme✅ (kapalı devre)
SadakatCashback kampanyaları, puan, seviye (tier) ve rozet✅
Limit & ücretKYC seviyesine göre limit sayaçları, ücret şeması ve quote✅
Cüzdana iadeKart ödemesinin iadesini karta değil cüzdana kredi olarak yatırma✅
Havale/EFT ile yüklemeKullanıcıya özel yatırma talimatı, eşleşen para otomatik kredilenir🚧
Bankaya çekim & IBAN transferKullanıcının kendi IBAN'ına çekim, üçüncü şahsa IBAN transferi🚧
Toplu ödemeCSV/liste ile çoklu ödeme, maker-checker onayı🚧
Fatura & fatura ödemeCüzdan içi fatura kesme; kurum faturası sorgulama ve ödeme🚧
ATM / QR ile nakit çekimKart olmadan nakit çekim kodu🚧
Kart ihracıCüzdana bağlı sanal/fiziksel kart🚧

🚧 işaretli yetenekler için API sözleşmesi hazır ve kararlıdır; üretimde çalışması bağlı bir sağlayıcı (banka entegrasyonu, fatura kurumu, ATM ağı, kart ihraççısı) gerektirir. Ayrıntı: Yol Haritası.

Operasyon yaşam döngüsü

Para hareket ettiren her çağrı bir operasyon üretir. Operasyon durumları — GET /wallet/operations/:id yanıtında ve webhook payload'larında birebir bu değerleri görürsünüz:

Cüzdan operasyon yaşam döngüsüDurum makinesi: operasyon INITIALIZED durumunda açılır, doğrulama gerekiyorsa CHALLENGED olur, onaydan sonra POSTING aşamasına geçer ve kapalı devrede doğrudan COMPLETED olur. Banka entegrasyonuna çıkan hareketler önce BANK_PROCESSING durumunda bekler; mutabakat gelirse COMPLETED, sonuç belirsiz kalırsa AWAITING_RECON olur — ikisi de başarısızlık değildir.DOĞRULAMAONAYKAPALI DEVREBANKA ÇIKIŞIMUTABAKATBELİRSİZINITIALIZEDCHALLENGEDPOSTINGCOMPLETEDBANK_PROCESSINGAWAITING_RECONAÇIKLAMAİŞLENİYORDIŞ TARAFTA BEKLİYORMUTABAKATTA — BAŞARISIZ DEĞİLBİTİŞ
Mutlu yol ve başarısız sanılan iki bekleme durumu. Terminal durumlar (FAILED, REVERSED, EXPIRED) ve risk tutması (HELD) şemaya girmedi — hepsi aşağıdaki tabloda. Şemanın anlattığı tek şey şu: BANK_PROCESSING ve AWAITING_RECON yolun ortasıdır, sonu değil.
DurumAnlamı
INITIALIZEDOperasyon açıldı, fon rezerve edildi, henüz onay bekliyor
CHALLENGEDOTP / step-up doğrulaması bekleniyor
POSTINGDefter kayıtları işleniyor
COMPLETEDTamamlandı — bakiyeye yansıdı
FAILEDNihai başarısızlık; rezerve fon serbest bırakıldı
REVERSEDTamamlanmış operasyon ters kaydedildi (iade/geri alma)
REVERSINGGeri alma başladı, defter sonucu bekleniyor; sistem otomatik olarak sonuçlandırır
BANK_PROCESSINGBanka tarafında işleniyor
AWAITING_RECONSonuç belirsiz — sessizce FAILED yapılmak yerine mutabakata alındı
HELDRisk kararı nedeniyle tutuldu; para bloke, kullanılamaz
EXPIREDOnaylanmadan süresi doldu; rezervasyon çözüldü
⚠️

AWAITING_RECON, HELD ve REVERSING terminal değildir. Bu durumlardaki operasyonu başarısız sayıp yeniden denemeyin — aynı Idempotency-Key ile sorgulayın veya webhook'u bekleyin.

Para hareketi deseni: quote → execute → complete

Para çıkaran işlemlerin çoğu üç adımlıdır. Bu, kullanıcıya ücreti hesaptan düşülmeden önce göstermek ve onayı doğrulamak içindir:

  1. /quote — ücret, vergi, limit uygunluğu ve varsa kullanılacak entegrasyon bilgisini döner. Para hareket etmez.
  2. /… (execute) — operasyon açılır, fon rezerve edilir, gerekiyorsa OTP tetiklenir. integrityHash + nonce döner.
  3. /…/:id/complete — quote'tan gelen integrityHash ve nonce ile onaylanır; OTP gerekiyorsa otpCode de eklenir.

integrityHash, adım 2'de gösterilen tutar/ücret ile adım 3'te işlenen tutarın aynı olduğunu garanti eder. Kullanıcıya gösterilen ile hesaptan çıkan farklıysa istek reddedilir.

Güvenlik modeli

  • Para hareketi = imza. s2s tarafında okumalar dahil her istek Ed25519 anahtarınızla imzalanır ve her çağrı, o anahtarda karşılık gelen cüzdan iznini gerektirir (Anahtar izinleri).
  • Idempotency zorunlu. Para hareket ettiren ve kayıt oluşturan çağrılarda Idempotency-Key header'ı zorunludur (tam liste). Aynı anahtar tekrar gönderilirse işlem tekrarlanmaz, ilk yanıt döner.
  • Dört-göz. Manuel müdahale, kampanya onayı ve toplu ödeme onayında isteği yapan ile onaylayan aynı kişi olamaz — bu kural rol kapısıyla değil, servis katmanında kimlik karşılaştırmasıyla zorlanır. Manuel müdahale kalıcı bir talep kaydıdır: talep eden ve onaylayan panel oturumlarından alınır, istek gövdesinden alınmaz.
  • Fail-closed. Bir kapı (limit, KYC, fraud, sağlayıcı) cevap veremiyorsa işlem reddedilir; "geçir gitsin" davranışı yoktur.

İlgili ürünler