checkout.session.completed vs payment_intent.succeeded: Which Stripe Event to Fulfil On
Which Stripe webhook event should trigger fulfilment: checkout.session.completed or payment_intent.succeeded? What each event carries, why SEPA Direct Debit and other delayed methods break naive handlers, what happens with subscriptions and free orders, and a handler that fulfils exactly once.