Payment Orchestrator
Ön Provizyon, Capture & İptal

Ön Provizyon, Capture & İptal

Ön provizyonda (pre-authorization) ödeme anında çekilmez: alıcının bankası tutarı bloke eder, ödeme AUTHORIZED durumunda bekler. Siparişi karşılamaya hazır olduğunuzda tutarın tamamını ya da bir kısmını capture ile çekersiniz; siparişi karşılamayacaksanız void ile blokeyi kaldırırsınız.

Tipik kullanımlar: kargoya verildiğinde çekim, depozito ve rezervasyon, kısmi karşılanan siparişler, inceleme bitene kadar bekletilen ödemeler. Aynı bloke, capture ve void modeli parçalı ödemenin kart parçalarında da kullanılır.

Ön provizyonu ödeme isteğindeki preauth alanıyla istersiniz. Bu sayfa ön provizyonun bütün kurallarını tek yerde anlatır; ödeme sayfaları kendi isteklerindeki alanı gösterip buraya bağlanır.

Tüm tutarlar minor unit (kuruş) cinsinden tam sayıdır: "amount": 10050 = ₺100,50. Ondalık ya da float göndermeyin.

Nasıl çalışır

Ödeme isteğinde preauth: true gönderin

Alanı hangi istekte göndereceğiniz ödeme yolunuza bağlıdır; bkz. Ön provizyonu isteme.

Tutar bloke edilir

Ödeme başarılı olursa durum CAPTURED yerine AUTHORIZED olur ve webhook adresinize payment.authorized gönderilir. Para henüz çekilmemiştir; siparişi bu olayla teslim etmeyin.

Capture ya da void yapın

Siparişi karşıladığınızda capture ile çekin (payment.captured ya da payment.partially_captured). Karşılamayacaksanız void ile blokeyi kaldırın (payment.voided).

Süreyi kaçırmayın

Capture edilmeyen ön provizyon, ödemenin açılışından 7 gün sonra platformda EXPIRED olarak kapanır; bkz. Süre dolumu.

Ön provizyonu isteme

Ayrı bir ön provizyon ucu yoktur. preauth alanını ödemeyi başlatan istekte gönderirsiniz:

Ödeme yolupreauth hangi istekteAyrıntı
Checkout Formu (kart ve kart dışı yöntemler)POST /payments/intentsKarar intent'e yazılır; formun yaptığı çekim (2D, 3D Secure ya da kart dışı yöntem) bu karara uyar. Formda ayrıca bir şey göndermezsiniz. Bkz. Checkout Formu
Direct API — kartPOST /payments/direct/payment (paymentMethod: "CARD")Kart — 2D, Kart — 3D Secure
Direct API — kart dışı yöntemlerPOST /payments/direct/paymentPayment

Alanın kuralları iki istekte de aynıdır:

DeğerSonuç
trueÖn provizyon: tutar bloke edilir, ödeme AUTHORIZED olur
false ya da alan yokAnında çekim: ödeme CAPTURED olur
Boolean olmayan değer ("true", "false", 1 …)400 VALIDATION_ERROR. Metin olarak gönderilen değer boolean'a çevrilmez

Ön provizyon talimatı hiçbir koşulda sessizce anında çekime dönüştürülmez. Talimatı yerine getiremeyen bir sağlayıcıya ödeme gönderilmez; ödeme ya başka uygun sağlayıcıya yönlendirilir ya da açık bir hatayla reddedilir (bkz. Hangi yöntemler destekler).

{
  "amount": 10050,
  "currency": "TRY",
  "orderId": "ORD-84722",
  "callbackUrl": "https://shop.example.com/payment/result",
  "preauth": true
}

POST /payments/intents isteğinin bütün alanları için bkz. Checkout Formu.

Hangi yöntemler destekler

Ön provizyonu ödemeyi gerçekleştiren sağlayıcının desteklemesi gerekir.

Kart

  • 2D: Ön provizyonu desteklemeyen sağlayıcılar adaylardan çıkarılır ve ödeme destekleyen bir sağlayıcıya yönlendirilir. Uygun sağlayıcı kalmazsa ödeme FAILED olur ve ret kodu PREAUTH_NOT_SUPPORTED'dır.
  • 3D Secure: Sağlayıcının ön provizyonu 3D Secure ile de desteklemesi gerekir. Desteklemeyen sağlayıcılar adaylardan çıkarılır. Uygun sağlayıcı kalmazsa ödeme FAILED olur ve ret kodu PREAUTH_3DS_NOT_SUPPORTED'dır. 3D Secure ile ön provizyonu destekleyen hiçbir sağlayıcı yoksa istek ödeme başlamadan 422 payment.preauth.three_ds_unsupported ile reddedilir.
  • 3D Secure akışında alıcı banka doğrulamasını tamamladığında para çekilmez; ödeme AUTHORIZED olur.

Kart dışı yöntemler

  • Bir yöntemin ve sağlayıcının ön provizyonu destekleyip desteklemediği GET /payments/methods yanıtındaki preauth alanındadır (yöntem satırında ve her sağlayıcıda).
  • Desteklemeyen yöntemle preauth: true gönderirseniz istek 422 payment.preauth.unsupported_for_method ile reddedilir. Ödeme başlatılmaz, tutar çekilmez.
  • Checkout Formu'nda ön provizyonlu bir intent için yalnız ön provizyonu destekleyen yöntemler ve sağlayıcılar gösterilir.

Capture

POST /payments/{id}/capture, AUTHORIZED ödemenin tutarını çeker. Uç Step-Up ister (Bearer token ve Ed25519 imzası; bkz. Kimlik Doğrulama).

BaşlıkDeğer
Idempotency-KeyZorunlu. Yoksa istek 400 payment.operation.idempotency_key_required ile reddedilir. Aynı anahtarla tekrarlanan istek ikinci kez çekim yapmaz
AlanTipZorunluAçıklama
paymentIntentIdstringEvetYoldaki {id} ile aynı ödeme kimliği
amountintegerHayırÇekilecek tutar, minor unit, en az 1. Gönderilmezse kalan tutarın tamamı çekilir
  • amount yetkilendirilen tutardan küçükse kısmi capture yapılır ve durum PARTIALLY_CAPTURED olur. Kalan tutarı sonraki capture isteğiyle çekebilirsiniz; toplam çekim yetkilendirilen tutara ulaştığında durum CAPTURED olur.
  • Toplam çekim yetkilendirilen tutarı aşamaz; aşan istek 400 payment.capture.amount_exceeded ile reddedilir.
# Step-Up imza başlıklarının nasıl hesaplandığı için Kimlik Doğrulama sayfasına bakın.
curl -X POST https://api-gateway.lunixi.com/api/v1/payments/9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30/capture \
  -H "Authorization: Bearer at_test_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -H "X-Key-Id: mk_test_sk_..." \
  -H "X-Date: 2026-10-11T09:00:00.000Z" \
  -H "X-Nonce: 3c1d8e2a-7b4f-4e6a-9d0c-5a2b1e8f7c64" \
  -H "Digest: SHA-256=..." \
  -H "X-Signature: ..." \
  -H "Idempotency-Key: cap-ORD-84722-1" \
  -d '{
    "paymentIntentId": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
    "amount": 7500
  }'

Capture yanıtı

{
  "status": "success",
  "code": "PAYMENT_PARTIALLY_CAPTURED",
  "message": "…",
  "data": {
    "id": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
    "amount": 10050,
    "currency": "TRY",
    "status": "PARTIALLY_CAPTURED"
  },
  "details": {
    "capturedAmount": "7500",
    "refundedAmount": "0",
    "remainingCapturable": "2550",
    "remainingRefundable": "7500"
  },
  "statusCode": 200,
  "requestId": "…"
}

Tam capture'da code PAYMENT_CAPTURED, data.status CAPTURED olur. details içindeki tutarlar minor unit metin olarak döner.

Void

POST /payments/{id}/void, capture edilmemiş bir ön provizyonu kaldırır; para hareket etmez ve ödeme VOIDED olur. Uç API anahtarı imzasını ya da panel oturumunu kabul eder; API ile çağırırken Kimlik Doğrulama sayfasındaki imza başlıklarını gönderin.

# Step-Up imza başlıklarının nasıl hesaplandığı için Kimlik Doğrulama sayfasına bakın.
curl -X POST https://api-gateway.lunixi.com/api/v1/payments/9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30/void \
  -H "Authorization: Bearer at_test_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -H "X-Key-Id: mk_test_sk_..." \
  -H "X-Date: 2026-10-11T09:00:00.000Z" \
  -H "X-Nonce: 6e2a9c41-0d3b-4f7a-8b15-9c4e2d1f7a03" \
  -H "Digest: SHA-256=..." \
  -H "X-Signature: ..." \
  -H "Idempotency-Key: void-ORD-84722-1" \
  -d '{}'

Void yanıtı

{
  "status": "success",
  "code": "PAYMENT_VOIDED",
  "message": "…",
  "data": {
    "id": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
    "amount": 10050,
    "currency": "TRY",
    "status": "VOIDED"
  },
  "statusCode": 200,
  "requestId": "…"
}
⚠️

Void ile iade farklıdır. Void, henüz çekilmemiş blokeyi kaldırır. Çekilmiş parayı geri vermek için İade kullanın; CAPTURED bir ödemeye void reddedilir.

Süre dolumu

  • Capture ya da void yapılmayan ön provizyon, ödemenin açılışından 7 gün sonra platformda EXPIRED (son durum) olur ve payment.expired webhook'u gönderilir. Süre hesap bazında değiştirilemez.
  • EXPIRED olan ödeme artık capture edilemez.
  • Karttaki bloke bu olayla kalkmaz. Bankaya iptal gönderilmez; bloke bankanın kendi süresiyle düşer. Blokeyi erken kaldırmak için süre dolmadan void yapın.

Durumlar

DurumAnlamı
AUTHORIZEDTutar bloke edildi; henüz çekilmedi
PARTIALLY_CAPTUREDBloke edilen tutarın bir kısmı çekildi; kalan tutar çekilebilir
CAPTUREDBloke edilen tutarın tamamı çekildi
VOIDEDBloke capture edilmeden kaldırıldı; para hareket etmedi
EXPIREDÖn provizyon 7 gün içinde capture edilmedi ve platformda kapandı
FAILEDÖn provizyon alınamadı; para bloke edilmedi

Bütün durumlar için bkz. Ödeme Listeleme.

Hatalar

DurumYanıtNe yapmalı
preauth boolean değil400 VALIDATION_ERRORtrue ya da false gönderin
Kart dışı yöntem ön provizyonu desteklemiyor422 payment.preauth.unsupported_for_methodYöntemi preauth olmadan kullanın ya da ön provizyonu destekleyen bir yöntem seçin
3D Secure ile ön provizyonu destekleyen sağlayıcı yok422 payment.preauth.three_ds_unsupportedÖn provizyonu 2D ile isteyin ya da ödemeyi anında çekimle alın
Kart sağlayıcısı ön provizyonu desteklemiyorÖdeme FAILED, ret kodu PREAUTH_NOT_SUPPORTED ya da PREAUTH_3DS_NOT_SUPPORTEDPara bloke edilmedi; ödemeyi anında çekimle alın
Capture ya da void isteğinde Idempotency-Key yok400 payment.operation.idempotency_key_requiredHer capture ve void için bir anahtar gönderin
Capture tutarı kalan tutarı aşıyor400 payment.capture.amount_exceededdetails.remainingCapturable kadar ya da daha az çekin
Capture edilecek ödeme AUTHORIZED ya da PARTIALLY_CAPTURED değil (ör. EXPIRED, VOIDED)400GET /payments/:id ile durumu kontrol edin
Void edilecek ödeme uygun durumda değil (ör. CAPTURED, VOIDED, EXPIRED)409 payment.intent.invalid_transitionÇekilmiş para için İade kullanın
Aynı ödemede başka bir işlem sürüyor409 payment.operation.lockedKısa süre sonra aynı Idempotency-Key ile tekrar deneyin
Capture ya da void'de aynı Idempotency-Key farklı istekle kullanıldı409 payment.operation.idempotency_conflictHer ayrı işlem için yeni bir anahtar kullanın; aynı işlemi tekrarlarken aynı anahtarı ve aynı gövdeyi gönderin
Eksik ya da geçersiz imza, süresi dolmuş token401, 403İstekleri Kimlik Doğrulama sayfasındaki gibi imzalayın; kodlar için bkz. Hata Yönetimi

Hata kodları

KodHTTPAnlamı
payment.preauth.unsupported_for_method422Seçilen kart dışı yöntem ya da sağlayıcı ön provizyonu desteklemiyor. Ödeme başlatılmadı, tutar çekilmedi. details.paymentMethod ve details.providerCode hangi seçimin reddedildiğini söyler
payment.preauth.three_ds_unsupported4223D Secure ödemede ön provizyon istendi ama 3D Secure ile ön provizyonu destekleyen sağlayıcı yok. Ödeme anında çekime çevrilmedi
payment.operation.idempotency_key_required400Idempotency-Key başlığı bu uçta zorunlu. Aynı işlemi tekrarlarken aynı anahtarı, yeni işlem için yeni anahtar gönderin

Webhook'lar

EventNe zaman
payment.authorizedTutar bloke edildi (AUTHORIZED). Para henüz çekilmedi; siparişi bu olayla teslim etmeyin
payment.partially_capturedKısmi capture tamamlandı (PARTIALLY_CAPTURED)
payment.capturedBloke edilen tutarın tamamı çekildi (CAPTURED). Siparişi bu olayla teslim edin
payment.voidedBloke capture edilmeden kaldırıldı (VOIDED)
payment.expiredÖn provizyon 7 gün içinde capture edilmedi (EXPIRED). Karttaki bloke bu olayla kalkmaz
payment.failedÖn provizyon alınamadı (FAILED)

Teslimat ve imza doğrulama için bkz. Webhook'lar.

Sonraki adımlar