Bir kripto checkout hangi olayları yayınlar?
InfraIO Pay her durum geçişinde bir webhook tetikler. Bu durum makinesi kasıtlı olarak küçük tutulmuştur, böylece fulfillment'ı tam olarak bir olaya bağlayıp gerisini göz ardı edebilirsiniz.
- payment.pending, alıcı işlemi yayınladı; onaylar hâlâ birikiyor.
- payment.confirmed, işlem, ağının onay eşiğine ulaştı.
- payment.settled, fonlar yerleşim cüzdanınıza süpürüldü. Fulfillment'ı burada yapın.
- session.expired, checkout penceresi ödeme olmadan kapandı. Asla ücretlendirilmez.
Hangi olayda fulfillment yapmalısınız?
payment.settled'te fulfillment yapın. pending durumundaki bir işlem hâlâ onaylanamayabilir ve onay eşikleri ağa göre değişir, bu nedenle daha erken bir durumu kesin kabul etmek, hiç gerçekleşmeyecek bir ödeme karşılığında sevkiyat yapma riski taşır. Settlement, paranın geri döndürülemez şekilde size ait olduğu noktadır.
Alıcıya ilerleme göstermeniz gerekiyorsa, UI'nızda pending ve confirmed durumlarını gösterebilirsiniz, ancak geri döndürülemez eylemi (sevkiyat, erişim verme, mint) her zaman settled'e bağlı tutun.
Bir webhook'un gerçek olduğunu nasıl doğrularsınız?
Her webhook, endpoint gizli anahtarınızla imzalanır. HMAC'i ham istek gövdesi üzerinden yeniden hesaplayın ve imza başlığıyla sabit zamanlı (constant-time) olarak karşılaştırın; eşleşmeyen her şeyi reddedin. HMAC konusunda yeniyseniz, MDN'nin SubtleCrypto.sign referansı iyi bir başlangıçtır ve Stripe'ın webhook en iyi uygulamalar kılavuzu operasyonel tarafı iyi bir şekilde ele alır.
Parse etmeden veya işlem yapmadan önce doğrulayın. İmzasız veya hatalı imzalanmış bir istek asla iş mantığınıza ulaşmamalıdır.
Teslimatı yeniden denemeye karşı nasıl güvenli hale getirirsiniz?
Webhook'lar en az bir kez (at-least-once) teslim edilir, bu nedenle bir ağ kesintisinden sonra aynı olay birden fazla kez gelebilir. Her olay bir idempotency anahtarı taşır; işlediğiniz anahtarları kaydedin ve tekrarlarda hiçbir şey yapmayın (no-op). Gönderenin zaman aşımına uğrayıp gereksiz yeniden denemeler yapmaması için 2xx'e hızlıca yanıt verin ve yavaş işleri asenkron yapın. InfraIO, kasıtlı olarak yeniden işlemeniz gerektiğinde tek tıkla replay sunan bir teslimat günlüğü tutar.