Bu ayrım Hyperswitch mirasıdır ve yük devretmenin (failover) temelidir: bir POS
düştüğünde intent aynı kalır, yeni bir attempt açılır. Zincirin tamamı zaman
çizelgesinde görünür.
Intent durum makinesi
Durum sözlüğünde
processing, requires_capture, partially_captured gibi
değerler de tanımlıdır ama bugünkü akışların hiçbiri oraya geçmez: banka-hosted
satış tek adımdır, ayrı bir capture aşaması yoktur. Bu adlar ileriye dönük
ayrılmıştır — istemcinizi bilinmeyen duruma toleranslı yazın.created durumundaki ödemeyi iptal etmek —
kod hatası değil iş kuralı ihlalidir: 409 payment.invalid_state alırsınız.
Attempt durum makinesi
Her yönlendirme adayı için ayrı bir attempt açılır: İki tutar alanına dikkat edin: intent’te mal bedeli (amount_minor), attempt’te
karttan çekilen tutar (charged_amount_minor) durur. Taksitli işlemde vade farkı
eklendiği için ikisi farklı olabilir; iade tavanı da karttan çekilen tutardır —
ayrıntı İade ve iptal sayfasında.
Olay defteri
Olan her şeyPaymentEvent kaydına düşer ve hiçbir kayıt silinmez — veritabanı
rolünün bu tabloda UPDATE/DELETE yetkisi yoktur. Tipik bir başarılı ödemenin
zinciri:
attempt.failed (gövdesinde failover: true) girer;
iade ve iptaller refund.created, refund.succeeded, payment.cancelled,
payment.void_failed olaylarıyla aynı deftere yazılır.
Zinciri okumak için:
Üç akış, tek model
Aynı intent üç farklı yoldan tahsil edilebilir:
Hosted akış PCI kapsamını en dar tutar ve
Checkout sayfasının kullandığı akıştır. Direct akışlar PCI
yükümlülüğü olan entegrasyonlar içindir; risk motoru
challenge kararı verirse
3DS’siz direct istek 409 risk.three_ds_required ile durdurulur.
Confirm ne yapar
confirm, ödemeyi bankaya taşıyan adımdır ve sırası sabittir:
- Kart gerçekleri bir kez çözülür: BIN, katalogdan banka / program / kart tipine çevrilir.
- Risk kapısı rotadan önce çalışır:
blockkararı bankaya hiç gitmeden409 risk.blockeddöndürür — ayrıntı Risk sayfasında. - Rota kararı verilir ve gerekçesiyle intent’e yazılır.
- Aday listesi sırayla denenir; taksidi desteklemeyen ya da o taksit için şeması olmayan hesaplar deneme bile açılmadan atlanır.
- İlk başarılı banka formu
requires_actionile döner; erişilemeyen hesaptaattempt.failedyazılır ve sıradaki adaya geçilir.
409 installments.not_offered döner ve intent created durumunda kalır —
istemci taksit sayısını değiştirip yeniden confirm edebilir.