Как правильно учитывать остаток товара на складе?
Второй вариант однозначно. Чтобы не производить манипуляции с товаром до тех пор, пока его реально не оплатили.Во втором варианте может получится так, что товар оплатят одновременно, т.к магазин ждет ответ от платежной системы для подтверждения оплаты.
При отправлении запроса в платежную систему - ставить лок на заказанное кол-во товара, после ответа - либо уменьшать кол-во в случае успеха, либо снимать лок.
С точки зрения бухгалтерии есть и третий, правильный вариант: остаток = доступный + зарезервированный товар. Положили в корзину = зарезервировали. Оплатили -> ничего не делать. Оплата не прошла = "разрезервировали" и принудительно выкинули из корзины.
А остаток, как таковой, уменьшать только по факту отгрузки (накладная).