Ö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 yolu | preauth hangi istekte | Ayrıntı |
|---|---|---|
| Checkout Formu (kart ve kart dışı yöntemler) | POST /payments/intents | Karar 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 — kart | POST /payments/direct/payment (paymentMethod: "CARD") | Kart — 2D, Kart — 3D Secure |
| Direct API — kart dışı yöntemler | POST /payments/direct/payment | Payment |
Alanın kuralları iki istekte de aynıdır:
| Değer | Sonuç |
|---|---|
true | Ön provizyon: tutar bloke edilir, ödeme AUTHORIZED olur |
false ya da alan yok | Anı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
FAILEDolur ve ret koduPREAUTH_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
FAILEDolur ve ret koduPREAUTH_3DS_NOT_SUPPORTED'dır. 3D Secure ile ön provizyonu destekleyen hiçbir sağlayıcı yoksa istek ödeme başlamadan422 payment.preauth.three_ds_unsupportedile reddedilir. - 3D Secure akışında alıcı banka doğrulamasını tamamladığında para çekilmez; ödeme
AUTHORIZEDolur.
Kart dışı yöntemler
- Bir yöntemin ve sağlayıcının ön provizyonu destekleyip desteklemediği
GET /payments/methodsyanıtındakipreauthalanındadır (yöntem satırında ve her sağlayıcıda). - Desteklemeyen yöntemle
preauth: truegönderirseniz istek422 payment.preauth.unsupported_for_methodile 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ık | Değer |
|---|---|
Idempotency-Key | Zorunlu. Yoksa istek 400 payment.operation.idempotency_key_required ile reddedilir. Aynı anahtarla tekrarlanan istek ikinci kez çekim yapmaz |
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
paymentIntentId | string | Evet | Yoldaki {id} ile aynı ödeme kimliği |
amount | integer | Hayır | Çekilecek tutar, minor unit, en az 1. Gönderilmezse kalan tutarın tamamı çekilir |
amountyetkilendirilen tutardan küçükse kısmi capture yapılır ve durumPARTIALLY_CAPTUREDolur. Kalan tutarı sonraki capture isteğiyle çekebilirsiniz; toplam çekim yetkilendirilen tutara ulaştığında durumCAPTUREDolur.- Toplam çekim yetkilendirilen tutarı aşamaz; aşan istek
400 payment.capture.amount_exceededile 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.
Idempotency-Keyzorunludur; yoksa istek400 payment.operation.idempotency_key_requiredile reddedilir.- Gövde boştur (
{}). - Yanıtta
codePAYMENT_VOIDED,data.statusVOIDEDolur.
# 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 vepayment.expiredwebhook'u gönderilir. Süre hesap bazında değiştirilemez. EXPIREDolan ö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
| Durum | Anlamı |
|---|---|
AUTHORIZED | Tutar bloke edildi; henüz çekilmedi |
PARTIALLY_CAPTURED | Bloke edilen tutarın bir kısmı çekildi; kalan tutar çekilebilir |
CAPTURED | Bloke edilen tutarın tamamı çekildi |
VOIDED | Bloke 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
| Durum | Yanıt | Ne yapmalı |
|---|---|---|
preauth boolean değil | 400 VALIDATION_ERROR | true ya da false gönderin |
| Kart dışı yöntem ön provizyonu desteklemiyor | 422 payment.preauth.unsupported_for_method | Yöntemi preauth olmadan kullanın ya da ön provizyonu destekleyen bir yöntem seçin |
| 3D Secure ile ön provizyonu destekleyen sağlayıcı yok | 422 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_SUPPORTED | Para bloke edilmedi; ödemeyi anında çekimle alın |
Capture ya da void isteğinde Idempotency-Key yok | 400 payment.operation.idempotency_key_required | Her capture ve void için bir anahtar gönderin |
| Capture tutarı kalan tutarı aşıyor | 400 payment.capture.amount_exceeded | details.remainingCapturable kadar ya da daha az çekin |
Capture edilecek ödeme AUTHORIZED ya da PARTIALLY_CAPTURED değil (ör. EXPIRED, VOIDED) | 400 | GET /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üyor | 409 payment.operation.locked | Kı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_conflict | Her 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ş token | 401, 403 | İstekleri Kimlik Doğrulama sayfasındaki gibi imzalayın; kodlar için bkz. Hata Yönetimi |
Hata kodları
| Kod | HTTP | Anlamı |
|---|---|---|
payment.preauth.unsupported_for_method | 422 | Seç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_unsupported | 422 | 3D 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_required | 400 | Idempotency-Key başlığı bu uçta zorunlu. Aynı işlemi tekrarlarken aynı anahtarı, yeni işlem için yeni anahtar gönderin |
Webhook'lar
| Event | Ne zaman |
|---|---|
payment.authorized | Tutar bloke edildi (AUTHORIZED). Para henüz çekilmedi; siparişi bu olayla teslim etmeyin |
payment.partially_captured | Kısmi capture tamamlandı (PARTIALLY_CAPTURED) |
payment.captured | Bloke edilen tutarın tamamı çekildi (CAPTURED). Siparişi bu olayla teslim edin |
payment.voided | Bloke 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
- Checkout Formu — intent oluşturma ve form
- Kart — 2D ve Kart — 3D Secure — kartla ödeme
- Payment — bütün yöntemler tek uçtan
- İade — çekilmiş parayı geri verme