Search code examples
stripe-paymentswebhooksfraud-preventionstripe-payment-intentsepa

When to send out booking confirmation with Stripe webhooks (payment_intent.succeeded taking too long)?


We are using Stripe.js + Elements + Webhooks, our payment methods are Cards, Sofort and SEPA.

Our question is on the usage of webhooks: Is it normal to always wait for the payment_intent.succeeded event before sending out a booking confirmation to the buyer? With some payment methods (SEPA, banking) this takes hours/days/too long.

What are best practices here? Only wait for payment_intent.processing?

We are selling courses, some of which may be booked shortly before the course starts, so we cannot wait a long time for the payment_intent.succeeded event. But then how do you deal with fake bookings?

Lets say we offer a course:

  1. Somebody buys it using e.g. SEPA payment method.
  2. He clicks "Order now!" on our page -> We get event payment_intent.processing
  3. We send out confirmation -> He can access the course
  4. He never pays, there is never a payment_intent.succeeded event, but he was still able to access it.

Alternatively, we wait until payment_intent.succeeded event -> But in this case participants cannot book a course on the same day using SEPA.

How is this case handled usually? Do I need to pay for Stripe Radar to identify fraud/fake transactions before I get the payment_intent.succeeded/payment_intent.failed event?

Any help is much appreciated!


Solution

  • Stripe Radar only works for card payments - https://stripe.com/docs/radar/risk-evaluation#not-evaluated.

    Yes, you should only send out booking confirmation to the buyer only upon receipt of payment_intent.succeeded webhook. Otherwise, like what you mentioned, if the payment fails, you would have provided access to the course for free.

    If you want to receive payments immediately, then you should limit the available payment methods to card payments only.

    As the Stripe documentation mentions - SEPA and SOFORT are both delayed notification payment method, which means that funds are not immediately available after payment.

    Maybe you can consider offering SEPA / SOFORT as an option only if the customer is making payment X days before the course starts. You would want to check what is the maximum time for the payment to arrive in your Stripe account for either of these payment methods : https://stripe.com/docs/payments/sepa-debit/accept-a-payment https://stripe.com/docs/payments/sofort/accept-a-payment