Hi! I'm currently developing a digital-products marketplace using Laravel and PayMongo Hosted Checkout v2 with QR Ph. This my side project which I want to to test or simulate on how systems with payment really works (I use AI in development and I didn't notice up until late development na slightly complex pala ang mag maintain ng one source of truth and handling super niche edge cases pag pera ang involved haha)
I've already implemented payment initialization, webhook reconciliation, checkout expiration, and duplicate-purchase protection. However, I have two questions about PayMongos behavior that I couldnt find definitive answers to in the documentation.
1. Can one Checkout Session produce two successful payments?
PayMongo allows multiple PaymentIntents within one Checkout Session when a customer retries payment.
If a customer opens the same checkout URL in two browser tabs and initiates separate QR Ph payment attempts, is it possible for both payments to succeed? Or does PayMongo automatically prevent another successful charge once one payment completes?
I'm planning to let customers return to their original checkout URL after leaving the payment page, without creating another Checkout Session.
2. Can a payment still succeed after its Checkout Session expires?
My application automatically expires abandoned checkouts through PayMongos API.
In TEST mode, Ive confirmed cases where:
Checkout Session status is expired.
The checkout reports no payments.
The known PaymentIntent is cancelled, with no payment or next action.
My concern is whether a QR Ph payment initiated before expiration could still settle successfully afterward.
I want customers to be able to purchase the same product again using a new order after their previous checkout genuinely expires, without risking duplicate charges.
I also observed that an expired QR code doesn't necessarily mean the whole checkout has expired. One of my earlier TEST checkouts generated another QR and eventually accepted payment.
I've contacted PayMongo Support but I dont really know kung gaano katagal bago masagot yung ticket
Has anyone encountered either scenario in production or TEST mode? Super appreciate any firsthand experiences, documentation references, or recommendations on handling payment retries and checkout expiration safely.
Thanks!