В настоящее время я создаю сайт электронной торговли с PHP / MySQL. Недавно я работал над интеграцией с корзиной покупок. Клиент хотел, чтобы акции были доступны потенциальным покупателям, поэтому я создал систему управления запасами. Корзина работает следующим образом:
Мой вопрос: каковы наилучшие практики для такого рода сценариев? Правильно ли я делаю это? Главное, что клиент не хочет продавать акции, которых у него нет.
Я ищу, чтобы обсудить, как улучшить функциональность, или что другие делают для достижения этого.
Альтернативный подход может заключаться в том, чтобы не запасать запас при помещении его в корзину покупок. Выполняйте проверку каждый раз, когда страница перезагружается, если элемент больше не доступен, отобразите сообщение типа «Предмет, который вы хотите купить, только что был распродан, он будет доступен в ближайшее время». И вы удаляете продукт из корзины покупок.
Теперь вам абсолютно необходимо зарезервировать содержимое корзины покупок прямо перед началом операции оплаты, затем либо удалить ее из запаса, либо удалить резервную копию в зависимости от успеха / отказа платежа. Вы делаете это лучше в одном прогоне кода, чтобы резерв длился как можно короче.
ProcessOrder () { bool reserved = ReserveShoppingCartContents (); if (reserved) { bool paymentStatus = ProcessPayment (); if (paymentStatus) RemoveShoppingCartContentsFromStock (); else ReleaseShoppingCartReserve (); } else { RefreshShoppingCartContents (); // Remove positions or adjust quantities MessageBox ("Could not reserve your shopping cart contents. Please check out your selection"); } }
Чем дольше ваш запас сохраняется, тем выше вероятность того, что ваш предмет будет продан. Вы минимизируете возможность конфликта: CustomerA начинается с корзины покупок, товар становится зарезервированным, приходит Клиент, видит, что товар отсутствует на складе и уходит, CustomerA решает, что ему не нравится цена и отменяет операцию. У вас было два потенциальных клиента, но они не могли продать.
я делаю проверку запасов на каждой перезагрузке страниц во время проверки и перенаправляет их на страницу корзины с сообщением об ошибке, если в ходе процесса были распроданы предметы. Акция снижается только при подтверждении заказа. Также я восстанавливаю запас, если заказ отменен.