İptal & İade Rehberi

Bir tahsilatı geri almanın iki yolu vardır: iptal (void) ve iade (refund). Hangisini kullanacağınız işlemin durumuna bağlıdır.

İptal mi İade mi?

DurumDoğru uçNeden
Tahsilat kesinleşmemiş (provizyon veya gün sonu öncesi)İptalDaha ucuzdur, karta anında yansır.
Tahsilat kesinleşmişİadeİptal artık mümkün değil (checkout.already.captured).
Tutarın yalnız bir kısmı geri verilecekİade + partialAmountKısmi iade; birden fazla kez yapılabilir.
Provizyon açık, tahsil edilmeyecekİptalBloke çözülür, tahsilat hiç gerçekleşmez.
işlem kesinleşti mi?
  ├─ hayır  →  transaction/cancel   (void — ücretsiz, anında)
  └─ evet   →  transaction/refund
               ├─ partialAmount yok  →  tam iade
               └─ partialAmount var  →  kısmi iade (tekrarlanabilir)

Kısmi İade Kuralları

  • İade tavanı tahsil edilen toplamdır (komisyon dahil). Yapılan iadelerin toplamı tavanı aşamaz.
  • Aynı işleme birden fazla kısmi iade yapılabilir; toplam tavana ulaşınca işlem tam iade edilmiş sayılır.
  • Her kısmi iade ana işleme bağlı ayrı kayıt üretir; transaction/detail iade edilen toplamı gösterir.
  • İade tutar bazlıdır — sepet kalemi göndermiş olsanız da "şu kalemi iade et" diyemezsiniz.
100 TL tahsilat
  ├─ partialAmount: 30  →  kalan iade edilebilir: 70
  ├─ partialAmount: 20  →  kalan iade edilebilir: 50
  └─ partialAmount: 60  →  RET (tavanı aşıyor, kalan 50)

Henüz ödenmemiş link payment-link/cancel ile iptal edilir; link ödenemez hâle gelir.

Link ödendiyse artık işlem iadesi gerekir — kısmi ödemeye açık linkte tahsil edilmiş tutar iptalle geri dönmez.

Link veya karekod ile alınan ödemenin iptali/iadesi de normal işlem uçlarından yürür: link/detail yanıtındaki transactionRef değerini cancel ya da refund ucuna verin.

Sağlayıcı Reddi

İptal/iade isteğini bankanın veya sağlayıcının reddetmesi mümkündür. Bu durumda pos.reversal.rejected.by.provider döner ve sağlayıcının ret gerekçesi hata mesajında yer alır — jenerik bir hataya düşmez.

Ret durumunda defterde hiçbir şey değişmez; gerekçeyi okuyup (ör. gün sonu geçmiş, tutar uyuşmuyor) uygun uca yönelin.

Sonuçları İzleme

İptal ve iade sonrası işlemin son hâlini transaction/detail gösterir: refundedAmount iade edilen toplamı, refundable / voidable işlemin hâlâ iadeye/iptale açık olup olmadığını söyler.

Muhasebe mutabakatı için dönem özeti ucundaki totalRefundedAmount alanını kullanın.

Scope

İptal payment:void, iade payment:refund scope'u gerektirir — anahtar oluştururken ikisini ayrı ayrı seçin.