Когда очищать корзину пользователя в своем движке интернет магазина?
В самописном движке для интернет магазина, не могу понять, когда лучше очищать корзину пользователя.
Пользователь нажал оплатить. Допустим, что система оплаты такая, что подтверждение может занять как минимум несколько минут.
А может и час-два.
Таким образом, пользователь оплатил на стороннем сайте, его перекинуло обратно на мой магазин. "Спасибо, оплата была, но еще не подтверждена"
До момента подтверждения или неподтверждения оплаты, что делать с корзиной пользователя, если он продолжить бродить по сайту?
*То есть, с точки зрения удобства для пользователя и UX.*
Очистить сразу? А вдруг оплата не подтвердится? И он, возможно, захочет заново оплатить использую другую банковскую карту.
Или плюнет на это дело - неизвестно.
Не очищать сразу, а ждать 5 мин - несколько часов? Тогда он сможет бродить по сайту с корзиной, в которой у него товары, которые он уже купил - неудобно, нелогично.
Первое: оплата и подтверждение
Нужно работать адекватно с подтверждением оплаты
вы когда передаете данные заказа, то вы кодируете данные одним ключем
банк раскодирует и потом кодирует вторым ключем и вы уже при подтвержддении их раскодируете также вторым ключем их и смотрите -- какой заказ подтвердил банк
Все платежки, которые я знаю работают по такому принципу:
- выдаются 2 ключа
- туда отправляете данные -- одним кодируете
- полученные данные вторым раскодируете
- в полученных данных есть номер заказа
Второе: очистка корзины
Очищайте корзину сразу после принятия заказа и записывайте заказ в заказы (что логично)
А оплачен заказ или нет -- другая история, у пользователя в случае ошибки оплаты просто будет не оплаченный заказ
Если нужно что-то напомнить -- напоминайте. У вас, мол, не оплачен заказ, оплатите, пока есть на месте товары
2) а если так: пользователя перекинуло на сайт оплаты, он там либо оплатил, но не нажал "вернуться обратно в магазин" - лень ему. Или вообще передумал и закрыл вкладку не оплатив? очищать корзину?
jakuraji, да, в момент создания заказа корзина очищается... что он там понаделал -- не важно, заказ уже оформлен и добавлен в БД
уведомления разосланы на почту/телефон :)
оплата в ожидании :)
У вас должна быть отдельная сущность - заказ, которых много, у которых есть статус - не оплачен, оплачен, доставлен и т.п. в момент, когда вы нажимаете оплатить - все содержимое корзины должно переехать в новый заказ а корзина очиститься.
Если пользователю понадобится, дайте ему возможность открыть историю заказов и при необходимости набрать корзину заново (или повторно оплатить, если статус - отказ/ошибка/отмена).
jakuraji, именно, буквально когда пользователь нажал оплатить, а не когда произвел оплату, разницу вы понимаете?
Вы обязаны создать сущность заказ, так как пользователь может пожелать сделать за раз несколько заказов (например разные адреса доставки или способы оплаты) и оплачивать их параллельно
как только пользователь нажимает 'перейти на paypal для оплаты' корзина очищается и создается заказ со статусом - ожидает оплаты, если он отказался оплачивать (или по таймауту например) менять на статус - 'заказ отменен пользователем' или 'истек срок оплаты заказа'.
таких заказов может быть НЕСКОЛЬКО на одного человека в один момент времени, юзкейс я описал, человек заказывает товар по разным адресамЮ особенно это актуально, когда подтверждение оплаты занимает время, не ждать же ему сутки (трое если выходные) чтобы сделать второй заказ.