01

Pending and delayed confirmation

Do not assume the success redirect and webhook arrive in a convenient order. Show a clear pending state, refresh status safely and explain what the user should expect.

Avoid presenting another purchase button while the original transaction may still complete.

Checks to run
  • Delay the webhook
  • Refresh and revisit the confirmation URL
  • Close the tab before redirect
  • Verify status from another device
02

Failure without lost context

When checkout fails or requires another action, preserve the selected plan and return the user to a useful recovery point.

Error messages should distinguish a declined payment from a technical problem without exposing provider internals.

Checks to run
  • Decline a test payment
  • Interrupt the network
  • Expire the checkout session
  • Return from authentication or 3DS failure
03

Subscription changes

Explain when a plan change takes effect, how proration works and which capabilities change immediately. Cancellation should communicate both the end date and the path to reactivate.

Test the interface against the provider state rather than a locally assumed state.

Checks to run
  • Upgrade and downgrade
  • Cancel at period end
  • Reactivate before expiry
  • Fail the next renewal
  • Check access at each transition
04

Refunds, disputes and support

A refunded payment should update access according to your policy and produce a customer-visible explanation. Support needs transaction references without exposing sensitive card data.

Design these states before the first real dispute forces an improvised manual process.

Checks to run
  • Issue a full and partial refund
  • Open a test dispute when supported
  • Verify receipt and invoice access
  • Confirm support can locate the transaction

Authoritative references

Go deeper

Have experienced reviewers test the real application.

AuditFlare validates findings across your product, code and business logic, then explains what to fix.

Explore the payment-flow audit