Which webhook is normally used to detect payment status success? I've read some conflicting advice where some say to detect at checkout.session.completed, while I read that payment is not 100% confirmed as success at checkout.session.completed, and to use payment.intent.success instead. I will need to update the user's wallet balance upon success so it has to be 100%.
I'd recommend checking this guide on checking the payment outcome made on Checkout Session. To put it simply, you will check the payment_status
property in the Checkout Session in any checkout.session.*
event including both synchronous and asynchronous payment methods.
After topping up and Stripe routes to the success url, ideally the user will then be routed to a payment confirmation page on my app. How can I get details about the payment in this case? I read that it's possible to add a query parameter in the success url that has the session id, but it doesn't seem like a safe choice as the user can change the url if they wanted to. I was wondering what the normal way would be?
The query parameter will only contain the Checkout Session ID (cs_xxx) which your system should retrieve information that you're looking for. Alternatively, you can use the checkout.session.*
event to check the payment information that suggested in the guide in the previous question.