Two flows. A redirect for cards and bank rails, and an express flow for wallets where the customer approves a prompt on their handset. The second one is where local checkouts break, so it is designed around waiting rather than around success.
- The waiting state names the amount and the handset it went to.
- A payment is only confirmed by the gateway, never by the customer returning to the page.
- On timeout the order is held rather than failed, and reconciliation resolves it.
- Every attempt writes a payment row before the gateway is contacted.