Это вопрос дизайна.
Где на самом деле происходит продажа? после оплаты или до оплаты.
После оплаты вы просто удаляете со склада товар, а также проверяете наличие на складе непосредственно перед оплатой. Вы держите запас в базе данных. Здесь есть небольшая задержка, вы также можете в какой-то момент убрать акцию и дать несколько минут для оплаты - если не выполненный платеж вернет его на склад, но там вы, вероятно, потеряете платеж.
Если вы выиграли, чтобы заблокировать его до платежа, вам также необходимо указать точку ведьмы при вводе пользовательских данных? нажатия кнопки?
Хитрость заключается в том, чтобы сохранить запас в базе данных и проверить наличие продукта до того шага, который вы хотите завершить.