Payment Orchestrator
İade

İadeler

İade, çekilen parayı alıcının kartına geri döndürür. Tek çağrı iki durumu da karşılar: tutarı hiç göndermezseniz tam iade, amount geçerseniz kısmi iade — ve ödeme tamamen iade edilene kadar istediğiniz kadar kısmi iade yapabilirsiniz. Platform, ödeme başına kümülatif iade toplamını izler ve çekilenden fazlasını asla iade edememenizi garanti eder.

Tüm tutarlar minor-unit (kuruş) integer'dır: "amount": 2500 = ₺25,00 iade. Asla ondalık veya float göndermeyin.

⚠️

İade, çekilmiş para içindir. Ödeme henüz yalnızca AUTHORIZED durumundaysa (tutar bloke, çekilmemiş), bunun yerine void ile serbest bırakın — bu, karta para hareketi olmadan blokeyi kaldırır.

Nasıl çalışır

İade endpoint'ini çağırın

Step-Up kimlik bilgileriniz ve bir Idempotency-Key ile POST /payments/:id/refund. Kısmi iade için amount ekleyin; kalan iade edilebilir bakiyenin tamamı için hiç göndermeyin.

Platform doğrular ve yürütür

Ödemenin statüsü ve kümülatif iade sayacı kontrol edilir — ödeme iade edilebilir değilse veya tutar kalanı aşıyorsa istek reddedilir. İade, ardından orijinal çekimi işleyen sağlayıcıya iletilir.

Ödeme statüsü güncellenir

Kısmi iadeler ödemeyi PARTIALLY_REFUNDED durumuna taşır; kümülatif iade toplamı çekilen tutara ulaştığında REFUNDED olur.

Webhook teyit eder

payment.partially_refunded veya payment.refunded, webhook endpoint'inize teslim edilir. Sipariş durumunuzu yalnız senkron yanıttan değil, webhook'tan mutabık kılın.

İstek

Kimlik doğrulama Step-Up'tır: at_live_… Bearer token'ınız artı Ed25519 istek imzası — tüm para hareketi endpointlerinde zorunludur; bkz. Authentication.

AlanTipAnlamı
amountinteger (minor unit), opsiyonelİade edilecek tutar. Kalan iade edilebilir bakiyenin tam iadesi için göndermeyin.
reasonstring, opsiyonelSerbest metin sebep; raporlamanız için iade kaydında saklanır.
# ₺25,00 kısmi iade
curl https://api-gateway.lunixi.com/api/v1/payments/pay_01J9ZK3W8Q/refund \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Idempotency-Key: refund-order-84721-1" \
  -H "Content-Type: application/json" \
  # ...artı Ed25519 istek-imza header'ları — bkz. Authentication
  -d '{
    "amount": 2500,
    "reason": "Bir urun iade edildi"
  }'
 
# Tam iade — amount göndermeyin
curl https://api-gateway.lunixi.com/api/v1/payments/pay_01J9ZK3W8Q/refund \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Idempotency-Key: refund-order-84721-final" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Siparis iptal edildi" }'

Her iade niyeti için ayrı bir Idempotency-Key kullanın. Aynı key'le tekrar denemek aynı iadeyi güvenle geri oynatır (ağ zaman aşımları çifte iade yaratmaz); aynı ödemede yeni bir key, ek bir kısmi iade oluşturur.

Yanıt

{
  "paymentId": "pay_01J9ZK3W8Q",
  "status": "PARTIALLY_REFUNDED",
  "amount": 10050,
  "currency": "TRY"
}

Yanıttaki amount ödemenin çekilen tutarıdır (taksitte vade farkı dahil). Kümülatif iade tutarı çekilen tutara ulaştığında status, REFUNDED olur.

Tam vs kısmi — kümülatif sayaç

Her iade, ödemenin kalan iade edilebilir bakiyesine mahsup edilir:

SenaryoSonuç
amount'suz iadeKalan bakiyenin tamamı iade edilir → REFUNDED
Kısmi amount < kalanÖdeme → PARTIALLY_REFUNDED; sayaç artar
Toplamı çekilen tutara ulaşan birden çok kısmi iadeSonuncusu ödemeyi REFUNDED durumuna çevirir
amount > kalan bakiyeReddedilir — fazla iade imkânsızdır

Kısmen capture edilmiş bir ödemede (PARTIALLY_CAPTURED) iade tavanı, başlangıçta yetkilendirilen tutar değil, çekilen tutardır.

Hangi statuslarda iade mümkün

Ödeme statüsüİade edilebilir mi?
CAPTURED, SETTLED, PARTIALLY_CAPTUREDEvet
PARTIALLY_REFUNDEDEvet — kalan bakiyeye kadar
AUTHORIZEDHayır — blokeyi kaldırmak için void kullanın
REFUNDEDHayır — iade edilecek bir şey kalmadı
INITIATED, PROCESSING, AWAITING_3DHayır — henüz çekilmiş para yok
FAILED, VOIDED, EXPIREDHayır — para hareketi olmadı
CHARGEDBACKHayır — chargeback yaşam döngüsü üzerinden yürütün

Parçalı ödeme. Checkout Formu'nda birden fazla kart ya da yöntemle ödenmiş siparişin ödeme kaydına gelen iade parçalara dağıtılır; bu iadede amount zorunludur ve parça parça sonuç meta.details.splitRefund alanında döner. Dağıtım kuralı ve API ile başlatılan parçalı ödemenin iade ucu: Parçalı Ödeme › İade.

Hatalar

DurumNe görürsünüzNe yapmalı
Ödeme iade edilebilir bir statüde değil409GET /payments/:id ile kontrol edin; AUTHORIZED ise void kullanın
amount kalan iade edilebilir bakiyeyi aşıyor422Ödemeyi okuyun, en fazla kalan bakiyeyi iade edin
Zaten tamamen iade edilmiş409Yapılacak bir şey yok — mutabakatta başarı sayın
Bilinmeyen payment id404paymentId'yi doğrulayın
Aynı Idempotency-Key ile tekrar istekAynı iade sonucu geri dönerGüvenli — çifte iade olmaz
Sağlayıcı tarafında iade hatasıHata yanıtı; ödeme statüsü değişmezDaha sonra aynı Idempotency-Key ile tekrar deneyin

Webhook'lar

EventNe zaman ateşlenir
payment.partially_refundedBir kısmi iade başarılı oldu; bakiye kaldı
payment.refundedÖdeme artık tamamen iade edildi

Endpoint yapılandırması ve teslimat semantiği için Webhooks.

Sonraki adımlar