Обработка элементов корзины электронной коммерции

Я создаю систему электронной коммерции и думаю о том, как лучше всего обрабатывать товары, добавленные в корзину пользователя.

Например, предположим, что я собираюсь купить продукт, который я только что добавил в свою корзину, автоматически, если было 10 наименований этого продукта, будет доступно только 9, но по какой-то причине сейчас я не хочу этого и просто закрыл мой браузер, как мне отменить этот запрос?

Я имею в виду, как мне снова превратить 9 доступных продуктов в 10, так как не было подтверждения платежа?

Я думал об использовании сеанса для этого, например, когда вы добавляете товар в корзину, у вас будет 5 минут, чтобы подтвердить, иначе он снова будет доступен, но это работает только тогда, когда этот пользователь постоянно просматривает сайт, так что что я могу это проверить, но не в том случае, если он просто закрылся, понимаете?

Любая помощь?

Ваш, Диого


person Diogo Garcia    schedule 19.11.2013    source источник
comment
со многими существующими сайтами электронной коммерции для покупок, почему вы пишете свой собственный?   -  person    schedule 19.11.2013
comment
Клиент так хочет...   -  person Diogo Garcia    schedule 20.11.2013


Ответы (3)


Вы обновляете количество запасов после того, как пользователь переходит к оформлению заказа, а не когда он добавляет товар в корзину. И верните его на склад, если оплата не была произведена в течение недели или в другое выбранное Вами время.

Кроме того, вы проверяете по каждому запросу или когда он попадает на страницу корзины, все ли товары еще доступны, возможно, кто-то купил их за это время, и сообщаете об этом пользователю.

Но если вы настаиваете на обновлении запасов при добавлении в корзину, вам придется хранить содержимое корзины в БД и отслеживать активность пользователя, обновляя метку времени последнего запроса. Вы выполняете cronjob, который проверяет каждые x минут неактивных пользователей и возвращает товары на склад. Вы можете добавить некоторый автоматический запрос ajax на страницу, чтобы, если пользователь не закрыл браузер, но был в состоянии afk, просто держать его активным.

person Gustek    schedule 19.11.2013
comment
Да... как я вижу, нет простого способа справиться с этим, я надеялся использовать какую-то функцию сеанса с сервера, но я считаю, что лучшим способом будет cronjob... - person Diogo Garcia; 20.11.2013
comment
IDK - многие люди отказываются от своей корзины прямо перед этапом оплаты. так что, основываясь на том, что вы говорите, эти предметы не будут доступны в магазине в течение недели. все равно есть над чем подумать... - person cartalot; 21.11.2013
comment
Время может быть скорректировано, но Вы должны заблокировать заказанные товары, прежде чем перейти к оплате. Итак, теперь вопрос в том, сколько времени вы собираетесь дать пользователю для совершения платежа? - person Gustek; 21.11.2013

Краткий ответ: пусть каждый попытается выкупить вас, пока кто-нибудь не заплатит вам, после чего всем остальным будет сказано, что акций недостаточно.

Длинный ответ: предположим, что за все 10 предметов борются 2 человека. Предположим, у вас нет AJAX. Оба видят 10. Оба кладут в свою корзину по 10 предметов. Оба помещают информацию о своей кредитной карте и оба нажимают «Отправить» в order.php. Первое, что нужно сделать в order.php: приобрести мьютекс. Посмотри инвентарь. Если достаточно инвентаря, платежная карта. В случае успешной зарядки уменьшите инвентарь и освободите мьютекс и верните успех. Если слишком мало инвентаря или карты выходят из строя, отключите мьютекс и верните ошибку.

person bishop    schedule 19.11.2013

вы вычитаете акции после завершения транзакции по кредитной карте. большинство людей не завершают покупку за то, что положили в корзину.

другой касательный момент в том, что люди могут положить вещи в корзину и не покупать их в течение длительного времени. поэтому на этапе оформления заказа, помимо подтверждения наличия товара, вы также подтверждаете цену на случай ее изменения.

связанная с этим проблема - ОДИН клиент, который пытается заказать больше, чем есть на складе. они положили 5 в свою корзину, а у вас есть только 3. проверив инвентарь, вы можете дать им вежливое сообщение.

все, что вы должны хранить в «корзине», — это идентификатор продукта и количество. всякий раз, когда что-то добавляется в корзину или обновляется количество, а на этапе оформления заказа вы подтверждаете наличие товара и получаете цены на все товары в корзине.

это также сделано для того, чтобы кто-то не смог взломать вашу корзину, изменить цены и сделать себе скидку. самый минимум - не отправлять цену продукта, когда клиент нажимает кнопку покупки. отправьте только идентификатор продукта и, возможно, количество, затем укажите цены и итоги на основе информации, которую вы получите из таблицы продуктов.

person cartalot    schedule 21.11.2013