Ödeme
Ödeme, sipariş belgesindeki purchase bloğu ile Mongo payments kaydının birlikte işlemesidir. Sağlayıcı sonucu gelmeden kart siparişi depoda işlenmez.
Yöntemler
Sipariş ödeme yöntemi PurchasePaymentMethod enum’udur:
| Değer | Alıcı ne yapar |
|---|---|
CARD | Kart / kayıtlı kart. Sağlayıcı iframe veya kayıtlı kart çekimi. |
TRANSFER | EFT / havale. Bildirim + yetkili onayı. |
ACCOUNT | Cari bakiye. Sipariş anında düşülür. |
CASH | Nakit (kapı / operasyon). |
CHECK | Çek. |
Çevrimiçi / çevrimdışı ayrımı ONLINE / OFFLINE alanındadır. Alıcının isOfflinePayment bayrağı kapı tahsilatına izin verir.
Kart
Sipariş
Kart siparişi PAYMENT_FAILED ile doğar. Alıcı ödeme ucunu çağırır.
İframe
Önce PayTR denenir. Başarısızsa Paywall. MagicPay servisi kodda vardır, bu zincirde açık değildir. Bekleyen payments kaydı PENDING yazılır.
Geri bildirim
PayTR veya Paywall webhook’u ödemeyi SUCCESS veya FAIL yapar ve payment.updated yayınlar.
Sipariş güncellenir
Başarı: sipariş PENDING olur, purchase.isPaid dolu, cari netleşir, buyer-order.created o anda yayınlanır. Başarısızlık: sipariş ödeme başarısız kalır.
Kayıtlı kart: kullanıcının paytrUtoken alanı PayTR saklı kart içindir.
Havale
Alıcı EFT iframe veya “havale bildirdim” yolunu kullanır. Sipariş PAYMENT_WAITING kalır; banka, IBAN, dekont ve bildirim zamanı purchase.transfer içinde durur. Yetkili onaylayınca manuel başarılı ödeme kaydı oluşur ve sipariş PENDING olur.
Cari
Bakiye yeterliyse sipariş doğrudan PENDING olabilir. Hareket tipi USE_BALANCE_FOR_PURCHASE. İptalde REFUND_BALANCE_FOR_ORDER veya alıcının seçimine göre TRANSFER_TO_BALANCE_FOR_ORDER. Kart iadesi başarısızsa tutar REFUND_FALLBACK_TO_BALANCE_FOR_ORDER ile cariye yazılır.
Kapıda tahsilat
Çevrimdışı sipariş sevk edilince borç OFFLINE_PURCHASE_FOR_ORDER ile cariye işlenebilir. Teslimde tahsilat OFFLINE_PAYMENT_FOR_ORDER ile kapanır. Kurye aracındaki collectedPayments tahsilatın saha kaydıdır.
Sevk sonrası tutar farkı
Hazırlıkta miktar değişirse ödeme yeniden hesaplanır. Kart ödenmiş ve iptal kalem varsa kısmi iade denenir. Sevkta tahsil ile net fark ORDER_AMOUNT_DIFFERENCE hareketine dönebilir.
Ödeme kaydı alanları
payments koleksiyonu sadedir: kullanıcı, platform (PAYTR / PAYWALL / MAGICPAY / MANUAL), yöntem, işlem no, sipariş id, durum (PENDING / SUCCESS / FAIL), tutar, hata kodu ve mesajı. Platform, sipariş id ve tutar sonradan değişmez (şemada immutable).