Keep the merchant database as the business-order source of truth and use SixPay events to drive payment state.
The exact fulfillment transition is merchant-specific, but every transition should be idempotent. Store the intentId as soon as the first correlated webhook arrives and retain the merchant’s own merchantOrderId throughout. Create a new checkout session for a retry or expired session rather than reusing browser credentials outside their lifetime.