Split 3D Secure Ödeme
POST /payments/marketplace/3d, ortasında 3DS challenge olan split 2D ödemedir. 3DS orkestrasyonu — redirect, banka challenge'ı, imzalı callback, expiry süpürmesi — birebir çekirdek akıştır; bu sayfa yalnızca split'in eklediklerini anlatır. 3DS mekaniğinin tamamı için (redirect yönetimi, callback semantiği, durum geçişleri) Kart — 3D Secure sayfasını okuyun.
Tüm tutarlar minor birimdir (kuruş): "amount": 25000 = ₺250,00. Satıcı bacakları minor birimli string kullanır ("amountMinor": "15000"); bacakların toplamı amount'a eşit olmalıdır.
Nasıl çalışır
Create — uygunluk & split baştan çözülür
POST /payments/marketplace/3d çağrısını sellers[] ile yaparsınız. Satıcı uygunluğu denetlenir ve split create anında hesaplanır — alıcı daha yönlendirilmeden.
Alıcı challenge'ı tamamlar
Yanıt bir redirect taşır (AWAITING_3D). Alıcıyı dönen URL'e gönderirsiniz; banka challenge'ı ve imzalı merchant callback'i çekirdek 3DS akışıyla birebir aynı çalışır.
Tahsilat split'i uygular
Challenge başarılı olursa tahsilat yürür ve önceden hesaplanmış satıcı bacakları — komisyon, hold, net — işlem kaydına yazılır.
İstek
Gövde, split 2D gövdesi artı callbackUrl alanınızdır. Step-Up auth ve Idempotency-Key, her para hareketi endpoint'inde olduğu gibi geçerlidir.
curl -X POST https://api-gateway.lunixi.com/api/v1/payments/marketplace/3d \
-H "Authorization: Bearer <access-token>" \
-H "X-Key-Id: <key-id>" \
-H "X-Date: <iso-timestamp>" \
-H "X-Nonce: <nonce>" \
-H "X-Signature: <ed25519-signature>" \
-H "Idempotency-Key: 0b7c9d4e-2f61-4c3a-9e5b-8a1d2c3e4f50" \
-H "Content-Type: application/json" \
-d '{
"amount": 25000,
"currency": "TRY",
"orderId": "ORD-2026-1043",
"callbackUrl": "https://platform.example.com/payments/return",
"card": {
"cardNumber": "5400000000000005",
"expireMonth": "12",
"expireYear": "27",
"cvcNumber": "123"
},
"sellers": [
{ "subDealerId": "d_8f2a...", "amountMinor": "15000" },
{ "subDealerId": "d_c41b...", "amountMinor": "10000" }
],
"multiSellerPolicy": "ALL_OR_NOTHING"
}'Yanıt
{
"success": true,
"inProgress": true,
"intentId": "pay_01HV3K9X7QWE...",
"status": "AWAITING_3D",
"isRedirect": true,
"redirectUrl": "/api/v1/payments/threed/pay_01HV3K9X7QWE..."
}Alıcıyı redirectUrl adresine gönderin (Lunixi-hosted, tek kullanımlık bir redirect — sağlayıcının sayfası doğrudan asla açığa çıkmaz). Buradan sonrası bayt bayt çekirdek 3DS akışıdır: banka challenge'ı → ALL /payments/threed/callback/{token} → callbackUrl adresinize bilgilendirici form POST (_signature + _timestamp platform bütünlük alanlarıyla — teslimat kararı için ona güvenmeyin), artı otorite kaynak olan sonuç webhook'u.
Split'in 3DS akışında değiştirdikleri
- Uygunluk capture'da değil, create'te denetlenir.
ALL_OR_NOTHINGaltında uygun olmayan bir satıcı422'yi anında üretir — alıcı, kapanamayacak bir ödeme için banka sayfasına hiç ulaşmaz. Bkz. sebep kodları. ALL_OR_NOTHING= ya tüm bacaklar ya hiç tahsilat. Challenge'ın başarılı olup split'in yalnızca bir kısmının uygulandığı bir durum yoktur: ödeme ya tüm bacakları uygunken kabul edilmiştir ya da baştan reddedilmiştir.PARTIAL_ALLOWED'da reddedilen bacaklar zaten create anında işaretlenmiştir; yalnızca uygun bacaklar kapanır.- Başarısızlık ve terk çekirdekle aynı davranır. Başarısız challenge ödemeyi düşürür (hiçbir bacak kapanmaz); terk edilen oturumlar otomatik
EXPIRED'a süpürülür. Pazaryerine özgü temizlenecek bir şey yoktur.
Hatalar
| Durum | Anlamı | Ne yapmalı |
|---|---|---|
422 | Satıcı(lar) uygun değil — şekil ve sebep kodları split 2D ile aynı | Satıcının durumunu düzeltin veya bacağı çıkarın |
400 | Doğrulama hatası | İstek gövdesini düzeltin |
401 / 403 | Step-Up auth başarısız | Yeniden imzalayın — bkz. Authentication |
Challenge seviyesindeki başarısızlık (alıcının bankada 3DS'i geçememesi) bu çağrıda bir HTTP hatası değildir — çekirdek 3DS'te olduğu gibi callbackUrl adresinize ve payment.failed webhook'u olarak gelir.
Webhooks
Herhangi bir 3DS ödemesiyle aynı: başarıda payment.authorized / payment.captured, başarısız challenge'da payment.failed, terk edilen oturumlarda payment.expired — payment.* ailesinin tamamı.
Sonraki adımlar
- Kart — 3D Secure — redirect, callback imzası ve durum referansı
- Split 2D Ödeme — istek alanları, satıcı bacakları ve politikaların detayı
- İade & İptal — split ödemeyi geri alma