Poyra’da bir ödeme üç kayıttan oluşur ve üçü birlikte okunur: 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.
Geçersiz bir geçiş istemek — örneğin 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 şey PaymentEvent 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:
Yük devretme yaşandıysa araya 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:
Yanıt, olayların yanında yönlendirme kararının tamamını da içerir — hangi adaylar değerlendirildi, neden bu POS kazandı. Ayrıntı Yönlendirme sayfasında.

Üç 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:
  1. Kart gerçekleri bir kez çözülür: BIN, katalogdan banka / program / kart tipine çevrilir.
  2. Risk kapısı rotadan önce çalışır: block kararı bankaya hiç gitmeden 409 risk.blocked döndürür — ayrıntı Risk sayfasında.
  3. Rota kararı verilir ve gerekçesiyle intent’e yazılır.
  4. Aday listesi sırayla denenir; taksidi desteklemeyen ya da o taksit için şeması olmayan hesaplar deneme bile açılmadan atlanır.
  5. İlk başarılı banka formu requires_action ile döner; erişilemeyen hesapta attempt.failed yazılır ve sıradaki adaya geçilir.
Hiçbir aday o taksidi sunmuyorsa yanıt banka reddi değildir: 409 installments.not_offered döner ve intent created durumunda kalır — istemci taksit sayısını değiştirip yeniden confirm edebilir.
POST /v1/payments çağrısına confirm: true eklerseniz oluşturma ve confirm tek istekte birleşir — checkout’un kullandığı yol budur.