Every online business meets the same support message: "I paid but my order is still pending." It is stressful for the customer and for you, but it has predictable causes and a reliable cure. This guide explains why payments get stuck and the layers of protection that ZurvaPay gives you.
- Why a paid order can stay pending
- The protection layers
- Use the status API
- Add the optional cron job
- Answering "I paid but nothing happened"
- Preventing failed payments
- FAQ
Why a paid order can stay pending
- The customer approved the payment, then lost signal and the page never refreshed.
- The browser was closed before the success page loaded.
- The confirmation took longer than usual to arrive.
- Your server was down or slow when the notification was sent.
- Your notification handler returned an error.
The protection layers
- Automatic verification. Payments that look incomplete are re-checked and confirmed a few minutes later without any action from you.
- Signed notification with retries. If your server does not answer HTTP 200, the notification is retried eight times over about six hours.
- Status API. Your server can ask for the current state of up to 50 payments in one request.
- Optional cron job. A script that checks your pending orders every few minutes and completes any that were paid.
Use the status API
Send your public key, your secret key and one identifier, or a list of up to 50. You get back a status for each: success, pending, failed or not_found. A not_found status means the customer never opened or completed the checkout; stop checking after 24 hours. The status API is for your server only, because it needs your secret key.
Add the optional cron job
Every five minutes the job loads your pending orders that are under 24 hours old, asks the status API about them in one call, verifies the signature of each paid one, checks the amount and completes the order with an atomic update. Because the update is atomic, it can never credit an order twice, even if the notification arrives at the same moment. The documentation includes sample code in several languages.
Answering "I paid but nothing happened"
- Ask for the transaction ID or the order identifier.
- Look it up on the Check Payment Status page in your dashboard. You only enter the ID; the system finds the payment.
- If it shows paid, complete the order once. If it shows pending, ask the customer to wait a few minutes. If it shows failed or not found, the customer was not charged for it.
Preventing failed payments
- Tell customers to keep the checkout page open until the confirmation appears.
- Use a clear amount and description so customers trust what they approve.
- Keep your notification URL fast and reliable.
- Make sure the customer has enough balance and an active wallet before they start.
Frequently asked questions
How long should I wait before worrying about a pending payment?
Give it a few minutes. Automatic verification and the status check usually settle it quickly.
Will the customer be charged twice?
No. A payment is credited once, and a duplicate request for an already-paid identifier is rejected.
Do I have to run the cron job?
No, it is optional. It simply guarantees that no paid order stays stuck if your server missed every notification.
Stop losing paid orders
Open a ZurvaPay merchant account or contact us and we will help you get started.
Related guides
Start accepting payments with ZurvaPay
Open a merchant account, connect your website with one API and get notified the moment a customer pays.
