我正在构建一个电子商务系统,我正在考虑处理添加到用户购物车中的商品的最佳方式。
例如,假设我即将购买我刚刚添加到我的购物车中的产品,如果这个产品有10件商品将只有9件可用,但由于某些原因我现在不想要它只是关闭了我的浏览器,我该如何取消该请求呢?
我的意思是,由于没有确认paymant,我将如何将9种可用产品再次变为10种呢?
我在考虑使用会话这样做,例如当您将项目添加到购物车时,您将有5分钟确认,否则它将再次可用,但仅当该用户不断浏览时才有效网站,só我可以验证,但如果他刚刚关闭你知道吗?
任何帮助?
此致, 迪奥戈
答案 0 :(得分:1)
您在用户进行结帐后更新您的库存计数,而不是在他将其添加到购物车时。 如果付款不是在一周内或您选择的其他时间,请将其重新存入库存。
加上您检查每个请求或当他到达购物车页面时,如果所有项目仍然可用,也许有人在此期间购买了它,并通知用户。
但是,如果您在添加到购物车时坚持更新库存,那么您必须将购物车内容保留在数据库中,并通过更新上次请求的时间戳来跟踪用户活动。你做一个cronjob,检查非活动用户的每x分钟,并放回库存中的物品。你可以在页面上添加一些自动的ajax请求,这样如果用户没有关闭浏览器但是让他保持活跃状态。
答案 1 :(得分:1)
简短的回答:让每个人都试着买你,直到某人成功付钱给你,此时其他人都被告知没有足够的股票。
答案很长:假设有2个人争夺所有10个项目。我们假设您没有AJAX。两者都看到10.两者都将10件物品放入篮子里。两者都放了他们的信用卡信息,然后点击提交到order.php。 order.php中的第一件事:获取互斥锁。检查库存。如果库存充足,请充值卡。如果成功收费,则减少库存并释放互斥锁并返回成功。如果库存或卡片太少失败,请释放互斥锁并返回错误。
答案 2 :(得分:0)
您在信用卡交易完成后扣除了该股票。大多数人没有完成购买他们放在购物车中的东西。
另一方面,人们可以把东西放在购物车中而不是购买 - 很长一段时间。所以在结账阶段 - 除了确认手头的库存 - 你也确认价格以防万一。相关问题是一个客户试图订购更多,然后手头有库存。他们把5个放在他们的购物车中,你只有3个。通过查看库存,你可以给他们一个礼貌的信息。
您应该在“购物车”中存储的是产品ID和数量。任何时候添加到购物车或更新数量,并在结帐阶段 - 您确认库存并获得所有购物车项目的价格。
这也是为了防止有人能够破解你的购物车,改变价格并给自己打折。最低限度是 - 当客户点击购买按钮时,不要发送产品价格。只发送产品ID和可选的数量,然后根据您从products表中获得的信息进行定价和总计。