İçeriğe atla
W3 Bilişim
Çözüm · FintechAPI Geliştirme
Asıl soru: aynı istek iki kez gelirse ne olur?

Fintech ve Ödeme Kuruluşları İçin Güvenli API Geliştirme

Para hareketi olan bir sistemde hatanın maliyeti bir hata mesajı değil, bir mutabakat farkıdır. Idempotency anahtarı, imzalı webhook, değişmez işlem kaydı ve günlük otomatik mutabakatı sonradan eklenen önlemler olarak değil, tasarımın ilk kararı olarak kuruyoruz.

  • Idempotent ödeme uçları
  • İmzalı ve tekrar korumalı webhook
  • Değişmez işlem kaydı
  • Otomatik mutabakat akışı
Bugünkü tablo

Sistem çalışıyor; sorun çalışmadığı anlarda çıkıyor.

Ödeme akışlarının çoğu mutlu senaryoda kusursuz görünür. Maliyet, zaman aşımı, tekrar ve kısmi başarı gibi arada kalan durumlarda birikir.

← Görseli yana kaydırın →
Yaklaşımımız

Önce hata senaryosu, sonra mutlu senaryo.

Ödeme API'si tasarımına 'ne ters gidebilir' listesiyle başlıyoruz. Tasarım kararlarının çoğu bu listeden çıkıyor; mutlu senaryo zaten kendiliğinden çalışıyor.

← Görseli yana kaydırın →
  1. İşlem durum makinesiBir işlemin alabileceği tüm durumlar ve geçişler yazılı hale gelir: beklemede, başarılı, başarısız, kısmi iade, tam iade, iptal, süresi dolmuş.TeslimDurum diyagramıGeçiş kurallarıUç durum listesi
  2. Idempotent uçlarPara hareketi yaratan her uç nokta idempotency anahtarı ister. Aynı anahtarla gelen ikinci istek yeni işlem açmaz, ilk sonucu döndürür.TeslimAnahtar politikasıTekrar yanıt davranışıSaklama süresi kararı
  3. İmzalı ve korumalı webhookGelen bildirimlerde imza ve zaman damgası doğrulanır; tekrar oynatma engellenir. Giden webhook'larda aynı disiplin karşı tarafa sunulur.Teslimİmza doğrulamaTekrar korumasıYeniden deneme planı
  4. Değişmez işlem kaydıKayıtlar üzerine yazılmaz; her değişiklik yeni bir satır olarak eklenir. Geçmiş, sonradan düzeltilemeyen bir zincir halinde durur.TeslimOlay tablosuAudit logDeğişiklik izleri
  5. Otomatik mutabakatSağlayıcı dosyası veya API kayıtları iç kayıtla günlük karşılaştırılır; eşleşmeyen satırlar sahibi olan bir listeye düşer.TeslimEşleştirme kurallarıFark listesi ekranıGünlük özet raporu
  6. Sandbox ve hata tatbikatıZaman aşımı, çift bildirim ve sağlayıcı arızası sandbox'ta bilerek tetiklenir. Sistem canlıya çıkmadan önce bu senaryolarda sınanır.TeslimSandbox ortamıHata senaryosu testleriKurtarma prosedürü
İmza aracı · Mutabakat tezgahı

Mutabakat ve idempotency hazırlık tezgahı

Günlük işlem hacminizi seçin, bugün sizde bulunan kontrolleri açık bırakın. Tezgah, örnek bir hata dağılımı üzerinden aynı günün sonunda kaç isteğin tekrar riski taşıdığını, kaçının çift kayda dönüşebileceğini ve farkın ne zaman görüleceğini hesaplar. Tüm sayılar örnektir ve tarayıcınızda hesaplanır.

1 · Günlük işlem hacmi (örnek)

Gerçek hacminize en yakın basamağı seçin; oranlar aynı kalır.

2 · Bugün sizde hangi kontroller var?

Açık bıraktıklarınız 'var', kapattıklarınız 'yok' sayılır.

Örnek bir günün sonundaSayılar seçtiğiniz hacme ve yukarıdaki örnek oranlara göre hesaplanır.
Tekrar riski taşıyan istek50 / gün (örnek)Zaman aşımı veya çift bildirim nedeniyle ikinci kez işlenmeye aday çağrı sayısı.
Çift kayda dönüşebilecek işlem5 / gün (örnek)Mevcut kontrollerinizle engellenemeyen, iki kez işlenebilecek işlem sayısı.
Sonucu belirsiz kalan işlem20 / gün (örnek)Yeniden deneme veya kurtarma olmadığı için 'beklemede' takılabilecek işlem sayısı.
Kontrol kapsaması%332 / 6 kontrolİmza doğrulaması kapalı: bildirim görünümündeki herhangi bir çağrı durum değiştirebilir. Bu risk sayıyla değil, kapıyla kapatılır.
Fark ne zaman görülür?Fark, müşteri şikâyeti veya dönem sonu kapanışına kadar görünmeyebilir; kaynağa geri gitmek zorlaşır.
Eksik kontroller ve önerilen ilk adım
  1. Idempotency anahtarıÖdeme, iade ve transfer uçlarında zorunlu idempotency anahtarı tanımlayın; ilk sonucu saklayıp tekrar isteğe aynısını döndürün.
  2. Webhook imza ve zaman damgası doğrulamasıİmza doğrulamasını zorunlu hale getirin, zaman damgası penceresi dışındaki çağrıları reddedin ve doğrulanmayanları ayrı kaydedin.
  3. Kontrollü yeniden denemeÜstel geri çekilmeli yeniden deneme ve ölü mektup kuyruğu kurun; sonuçsuz işlemler operasyon listesine düşsün.
  4. Günlük otomatik mutabakatSağlayıcı dosyasını veya API kayıtlarını günlük çeken eşleştirme işi kurun; eşleşmeyen satırlar sahibi olan bir ekrana düşsün.
Hesapta kullanılan örnek varsayımlar
  • İsteklerin binde beşi zaman aşımına uğruyor (örnek varsayım).
  • Zaman aşımına uğrayan isteklerin %60'ı istemci tarafından tekrar gönderiliyor (örnek varsayım).
  • Sağlayıcı bildirimlerinin binde ikisi aynı olay için iki kez düşüyor (örnek varsayım).
  • Bu oranlar sektör ortalaması veya W3 ölçümü değildir; yalnız kontrollerin etkisini karşılaştırmak içindir.

Bu tezgah, hata senaryolarının etkisini konuşulabilir hale getirmek için hazırlanmış basitleştirilmiş bir modeldir; gerçek sisteminizin ölçümü, denetim raporu veya mevzuat uygunluk değerlendirmesi değildir. Lisans, bildirim ve denetim yükümlülükleri kurumunuzun hukuk ve uyum biriminin sorumluluğundadır.

Kapsam

Para hareketi olan bir API'de standart kabul ettiğimiz katmanlar

Aşağıdakiler proje büyüklüğünden bağımsız olarak kapsamda yer alır; tartışma konusu hangilerinin olacağı değil, her birinin ne kadar derin kurulacağıdır.

← Görseli yana kaydırın →
Teknoloji ve yaklaşım

Uçları Node.js ile yazıyor, işlem bütünlüğü gereken yerlerde PostgreSQL üzerinde veritabanı düzeyinde tekillik ve işlem (transaction) garantisi kullanıyor, kuyruk ve anahtar saklama için Redis tercih ediyoruz. Sözleşmeyi OpenAPI ile yazıp Postman koleksiyonuyla teslim ediyoruz; kapsamın tamamı API geliştirme sayfasında.

Ödeme akışının müşteri tarafındaki ekranları web yazılım geliştirme, mobil uygulama içi ödeme akışları mobil yazılım geliştirme kapsamında ilerler. Dışa açık uçlarda bağımsız doğrulama isterseniz süreci sızma testi rehberimizde anlattığımız gibi planlıyoruz; muhasebe tarafına yazan entegrasyonlarda Logo ERP çözüm ortaklığı devreye giriyor.

Denetim ve izlenebilirlik

Denetime hazır olmak, rapor üretmekten önce kayıt tutmaktır.

Bir denetim sorusu genellikle tek cümledir: 'Şu işlemde ne oldu?' Bu sorunun yanıtı, sistemin nasıl kayıt tuttuğuna göre ya birkaç saniyede ya da birkaç günde verilir.

← Görseli yana kaydırın →
  • İşlem geçmişiHer durum değişikliği zaman, kaynak ve tetikleyici bilgisiyle ayrı satır; geçmiş üzerine yazılmaz.
  • Elle müdahale kaydıOperasyon ekranından yapılan her düzeltme kullanıcı ve gerekçe ile birlikte kaydedilir.
  • Erişim kaydıHangi kullanıcının hangi kaydı görüntülediği ayrıca tutulur; yetki değişiklikleri izlenir.
  • Saklama ve arşivKayıtların ne kadar süre tutulacağı ve nasıl arşivleneceği, uyum biriminizin verdiği çerçeveye göre tanımlanır.

Saklama süresi, veri yerleşimi ve raporlama biçimi gibi başlıklar mevzuata ve kurumunuzun yükümlülüklerine göre değişir; bu kararları hukuk ve uyum biriminizle birlikte yazılı hale getirip teknik tarafta uyguluyoruz. Uygunluk beyanı vermiyoruz. Karar sürecinde bağımsız bir teknik görüş isterseniz teknik danışmanlık tek başına da alınabilir.

Örnek plan

Örnek bir ilk faz: tek ödeme akışı, uçtan uca

Aşağıdaki plan, tek bir ödeme akışının (tahsilat, iade, bildirim) uçtan uca kurulması için hazırlanmış örnektir. Sizin planınız akış sayısı ve sağlayıcılar netleştikten sonra çıkar.

Örnek ilk faz planı: haftalar, yapılan iş ve hafta sonundaki çıktı
HaftaNe yapılırHafta sonunda elinizde ne olur
1. haftaDurum makinesi ve hata senaryolarıDurum diyagramı, uç durum listesi
2. haftaSözleşme ve idempotency politikasıOpenAPI tanımı, anahtar kuralları
3–4. haftaTahsilat ve iade uçlarıIdempotent uçlar, tekillik kısıtları
5. haftaWebhook güvenliği ve kuyrukİmza doğrulama, yeniden deneme, ölü mektup kuyruğu
6. haftaAudit log ve operasyon ekranıDeğişmez kayıt, kurtarma listesi
7. haftaMutabakat işiEşleştirme kuralları, fark listesi, günlük özet
8. haftaHata tatbikatı ve devirSandbox senaryo testleri, çalışma kılavuzu

İlk akış canlıda kararlı çalıştıktan sonra yeni ödeme yöntemleri aynı katmana eklenir: durum makinesi, idempotency ve mutabakat yeniden kurulmaz, yalnız sağlayıcıya özel eşleştirme yazılır.

SSS

Sık sorulanlar

Idempotency, webhook doğrulama, mutabakat, kart verisi ve mevzuat sorumluluğu hakkında en çok sorulanlar.

Ağ üzerinde bir istek gönderilip yanıt alınamadığında istemci isteği tekrar gönderir; ama ilk istek sunucuya ulaşmış ve işlem yapılmış olabilir. Idempotency anahtarı, istemcinin her işleme benzersiz bir kimlik vermesidir: aynı anahtarla gelen ikinci istek yeni bir işlem başlatmaz, ilk işlemin sonucunu döndürür. Para hareketi olan uçlarda bu, çift çekim ve çift iade riskini kaynağında keser.

Hata senaryolarınızı birlikte listeleyelim

Hangi sağlayıcılarla çalıştığınızı, hangi akışlarda fark yaşadığınızı ve bugün mutabakatı nasıl yaptığınızı anlatın; ilk görüşmede kontrol boşluklarını ve gerçekçi bir ilk faz kapsamını çıkaralım. Keşif görüşmesi ücretsizdir ve sizi bağlamaz.

  • Keşif görüşmesi ücretsiz
  • Kapsam netleşmeden fiyat vermiyoruz
  • Uyum beyanı değil, teknik uygulama
API Geliştirme

Çift çekimi şikâyetten değil, mutabakattan öğrenin

Idempotency, imzalı webhook, değişmez işlem kaydı ve günlük otomatik mutabakatı tasarımın ilk kararı olarak kuruyoruz.

Keşif görüşmesi ücretsizKapsam netleşmeden fiyat vermiyoruzUyum beyanı değil, teknik uygulama