Akış (özet)
1. Adım — 3DS Init
| Alan | Tip | Zorunluluk | Açıklama |
|---|---|---|---|
external_id, amount, installment, card, buyer, billing_address, shipping_address, basket_items | Opsiyonel | — | Non-3D ile aynı |
operation_type | enum | Opsiyonel | sale (varsayılan) veya pre_auth |
callback_url | url | Zorunlu | Bankanın 3DS sonrası form-post yapacağı endpoint. Sunucu tarafında Payven’in /3d/callback endpoint’ini kullanmanız önerilir; bu alanı yalnızca özel akışlarda kendi endpoint’inizle override edin. |
return_url | url | Zorunlu | Müşterinin son olarak yönlendirileceği URL. Genellikle frontend sayfası. |
cancel_url | url | Opsiyonel | Müşteri 3DS sayfasını iptal ederse yönlendirileceği URL |
Yanıt
extra_properties.redirect_url adresine müşteriyi HTTP 302 ile yönlendirin (veya tarayıcıda window.location.href).
2. Adım — 3DS sayfasında doğrulama
Müşteri bankanın 3DS sayfasında SMS, mobil uygulama veya biometrik onay sağlar. Payven kapsamı dışındadır — banka kendi sürecini yürütür.3. Adım — Callback (Banka → Payven)
Banka, 3DS sonucunu Payven’e form-post ile iletir (POST /payments/3d/callback). Bu kısım otomatik gerçekleşir, müdahale gerektirmez. Payven, callback’i alır → bankaya Complete3DSPayment (otorizasyon) gönderir → işlem son durumuna gelir.
Callback scope
Bu parametreler yalniz
pv_* query parametreleri (ileri seviye): Bazı banka konnektörleri,
3DS init sirasinda callback_url query parametrelerini koruyarak callback’i geri
yonlendirir. Bu durumda Payven pv_* prefix’li parametreleri callback scope’unda
otomatik olarak IPayvenRequestContext’e besler — handler’lar standart Authorization
header’i olmasa bile dogru tenant/merchant bagliminda calisir:| Parametre | Anlam |
|---|---|
pv_tenantId | Override tenant kimligi (callback scope’a init zamaninin tenant’ini tasimak icin) |
pv_merchantId | Override merchant Guid |
pv_externalMerchantId | Override merchant ExternalId (string) |
pv_recurringId | Recurring 3DS callback’i isaretle |
pv_return_url | Portal redirect hedefi (callback sonrasi) |
AllowAnonymous endpoint’lerde (3DS callback gibi) etkindir;
authenticated endpoint’lerde JWT/header semantikleri once gelir, pv_* parametreleri yok sayilir.4. Adım — Return URL (Payven → tarayıcı)
Payven, müşteriyireturn_url adresine yönlendirir. URL’ye query parametresi olarak transaction_id ve status eklenir:
5. Adım — Sunucu tarafında final durum sorgusu
PaymentStatus yapısındadır:
status alanından okuyun:
status | Anlam |
|---|---|
completed | Sale akışı — ödeme başarıyla tamamlandı |
authorized | PreAuth akışı — ön provizyon alındı, /capture çağrılması bekleniyor |
failed | 3DS başarısız veya banka reddetti — error_code ve provider_error_code inceleyin |
three_d_secure_init_processing | 3DS init başlatıldı, müşteri henüz banka 3DS sayfasında |
three_d_secure_auth_processing | Müşteri 3DS’i tamamladı, otorizasyon (Complete3DSPayment) yolda |
Frictionless vs Challenge
3D Secure 2.x’te banka iki moddan birine karar verir:| Mod | Anlam |
|---|---|
| Frictionless | Banka kart sahibini doğrulamak için müşteriye soru sormaz; risk skoruna güvenir. Akış 1-2 saniyedir, kullanıcı redirect’i fark etmeyebilir. |
| Challenge | Banka SMS, mobil uygulama veya biometrik doğrulama ister. Kullanıcı 30sn-2dk arası ek adım yapar. |
extra_properties içinde döner; ileride üst seviye three_ds.* alanı olarak yapısal olarak verilecektir (bkz. Payment Objesi → Yol Haritası).
Hata senaryoları
| Senaryo | status | error_code |
|---|---|---|
| Müşteri 3DS sayfasını iptal etti / kapattı | failed | three_ds_user_cancelled |
| 3DS doğrulaması başarısız (yanlış SMS, vb.) | failed | three_ds_authentication_failed |
| 3DS timeout (banka yanıt vermedi) | failed | three_ds_timeout |
| 3DS başarılı ama banka otorizasyonu reddetti | failed | bank_declined (+ provider_error_code) |
| Callback gelmediyse — return_url’e ulaşılamadı | pending_3ds | — (sonradan webhook ile temizlenir) |
Webhook ile asenkron yakalama
return_url’e yönlendirme müşteri tarayıcısı üzerinden çalışır — müşteri tarayıcıyı kapatırsa sonucu kaçırırsınız. Webhook entegre edin:
Test ortamı
Sandbox 3DS sayfasında banka simülasyonu çalışır. Test kart numaralarına, şifrelere ve frictionless/challenge tetikleyen senaryolara Test Kartları sayfasından bakın.Sonraki adımlar
Pre-Auth → Capture
3DS başarılı sonrası iki aşamalı çekim.
Hosted Checkout
PCI-DSS yükünü minimize eden Payven barındırmalı sayfa.
Webhook İmza Doğrulama
Asenkron olayları güvenle işleyin.
İade İşlemi
Tam veya kısmi iade.