An order that stays pending after the customer paid has one of two causes. Which one depends on how the customer paid.
Paid by bank transfer or another offline method
This is expected. KahunaCart cannot see money arriving in your bank account, so an offline order waits at pending until you confirm it.
Open the order in KahunaCart → Orders and click Mark paid. See How do I mark a bank transfer order as paid?
Paid through Stripe, PayPal or Polar
The provider tells your store about a payment by webhook. If the order has not completed, that webhook did not arrive or was refused. The page the customer saw after paying is only a holding page; the webhook is what completes the order.
- Check the webhook log for a delivery at the time of the payment:
bin/plugin kahunacart webhooks --provider stripe
- Open the order in the admin and look at its transaction ledger. A webhook that never landed shows a pending purchase that never went to success.
- Fix the cause the log points to:
| What the log shows | What to do |
|---|---|
| No rows for the provider | Nothing is reaching your store. See Payment webhooks aren't arriving. |
400 |
The signature check refused it. See Webhook deliveries fail with a 400. |
500 |
Your store broke while processing it. Read logs/grav.log. The provider retries. |
- Redeliver the webhook from the provider's dashboard.
Redelivering is safe. Completing an order twice does nothing the second time, and download links are not duplicated.