Payment Bugs

// 4 bugs

Bugs in checkout flows, payment retries, webhooks, refunds, subscriptions, and invoices.

// Why it matters

Payment bugs directly affect money and user trust. A double charge, a missed webhook, or an order that stays pending after a successful payment can mean lost revenue, refund costs, and serious damage to your product's reputation.

// Common symptoms

// Testing types:API testingIntegration testingManual testingRegression testingExploratory testing
Practice this β†’ Hunt these bugs hands-on in the E-commerce Practice App.

// Bugs in this category

Difficulty
Severity

Showing 4 of 4 bugs

User Charged Twice After RetryCritical

When a payment request times out or the response fails to reach the client, the client retries the request. If the payment API is called without an idempotency key, the provider has no way to recognise the retry as a duplicate and processes it as a second, independent charge β€” billing the user twice for the same order.

IntermediateAPI testingManual testingExploratory testing
Payment Succeeds but Order Remains PendingCritical

The payment provider confirms a successful charge, but the application's order status is not updated from 'pending' to 'paid'. This leaves the order stuck β€” fulfilment is blocked, the customer is billed but receives nothing, and the only evidence of payment is in the payment provider's dashboard.

IntermediateAPI testingManual testingExploratory testing
Refund Processed but Order Not UpdatedMedium

A refund for order 601 is successfully processed at the payment provider β€” the charge is reversed and the provider's dashboard shows the refund as complete β€” but the application's order status remains 'paid' rather than updating to 'refunded'. The application's webhook handler processes payment events but has no handler for the refund event type, so the order state machine never transitions.

BeginnerAPI testingManual testingExploratory testing
Webhook Accepted Without Signature VerificationHigh

The payment webhook endpoint POST /api/webhooks/payment processes any incoming request without verifying the provider's HMAC-SHA256 signature. A forged webhook event claiming a payment succeeded for order 701 can be sent by any HTTP client and will be processed as a legitimate payment, crediting an order without a real charge having occurred.

IntermediateSecurity testingAPI testingManual testing

// Practise finding these bugs

Hunt payment bugs hands-on in a live practice app, then check your findings against the seeded-bug answer guide.