billing-api · 2024
Subscription billing for SaaS
Payment webhooks arrive out of order and more than once — a naive handler charges twice. I built an idempotent event log with a deduplication key and a retry queue on RabbitMQ, so a repeated callback is recorded but never billed again.
PHP 8.4 · Symfony · PostgreSQL · Docker · RabbitMQ