Buyers double-click. Phones lose signal halfway through a payment and the app tries again. Gateways sometimes report the same payment twice. On a prize or auction site, each of these can turn into a buyer paying twice for one thing, followed by a support ticket and a refund. Current versions of PrizeX handle these cases. This post explains how, what you'll see in your admin, and where the limits are.
This post is about PrizeX, the real-money edition sold on startmymarketplace.com. PrizeX Rewards, the coins edition, takes no payments.
One click, one order
A double click on checkout, a second tab or a retried checkout no longer creates a second payment request. The buyer is taken to the payment request that's already open for the same cart, so the same goods can't be bought twice by accident. This covers the cart checkout and Buy now. If the buyer changes the cart, the address or the coupon, that's a new purchase and gets its own payment request.
Wallet top-ups work the same way. Pay is disabled as soon as it's tapped. A second top-up for the same amount within ten seconds, from the storefront or the app, goes to the payment page of the first one.
One payment, one order
When a payment comes in, PrizeX marks its payment request as paid in a single step that only one payment can win. If the gateway sends its confirmation twice, or the buyer reloads the return page, the second attempt finds the request already paid and stops. The order is fulfilled once.
A second payment is kept, not lost
Sometimes the money really is taken twice: the buyer pays in two tabs, or pays again because the first payment looked stuck. PrizeX can't undo a charge at your payment provider. Instead, it makes sure the second payment isn't lost or quietly added to the order.
- The first payment completes the order. The second doesn't change the order's figures.
- The second payment is listed for you. It's under Payment requests › Paid, not ordered, marked Charged twice, with the line "Charged twice — refund the extra payment."
- You refund it. Refund the extra payment at your payment provider. The same payment isn't listed twice, so it can't be refunded twice.
This works with gateways that report their own payment ID, which most do. Many gateways, including PayPal, Razorpay, Authorize.Net, Flutterwave and Paytm, also tell the buyer that the extra payment is held for the store to refund.
Tickets and spins
- Prize draw tickets (app): if an app buys tickets, times out and tries again, the buyer pays once. A retry gets the first tickets back.
- Mystery box spins (app): a spin that's sent again after a timeout is paid once, and the retry gets the first spin back.
For the app cases, the app sends a key with its request, so a retry can be matched to the first try. A request sent without a key works as it did before. If you build your own app on the PrizeX API, send the key with each ticket purchase and spin.
Staff logged in as a customer can't spend
Support staff sometimes log in as a customer to see what they see. While they're logged in that way, they can't spend or move the customer's money. Checkout, Buy now, ticket purchases, top-ups, wallet payments, withdrawals and transfers are refused with a message. Each refused attempt is written to the admin log with the staff member's name and the customer's.
What it doesn't cover
- Charges at the provider. If a buyer really pays twice, the money has been taken. PrizeX lists the second payment for you, but you refund it yourself at your payment provider.
- Gateways that don't report a payment ID. Some gateways don't, Skrill among them. For those, a second payment can't be matched to the first.
- App requests without a key. They work as before, with no retry protection.
- Every purchase type. The protections above are the ones this post covers. Other add-ons handle repeat requests in their own way, so check each one's notes.
What you need
The protections in this post need these versions or later. Update your store and its add-ons to get them:
- Kernel 1.1.777
- Prize draws (lottery add-on) 1.4.284
- Mystery Box 1.1.198
FAQ
Does PrizeX refund a double charge automatically?
No. It lists the second payment under Payment requests › Paid, not ordered, marked Charged twice, and you refund it at your payment provider. The original order isn't changed.
What does a buyer see after a double click on checkout?
They're taken to the payment request that's already open for the same cart, so there's one order to pay, not two.
Does this work with every payment gateway?
No. Matching a second payment to the first needs the gateway to report its own payment ID, which most do. Skrill doesn't, so a second Skrill payment isn't matched.
Can my support team buy something while logged in as a customer?
No. While logged in as a customer, staff can't spend or move that customer's money, and each refused attempt is written to the admin log.