购物车价格变动

时间:2010-11-21 04:55:55

标签: php asp.net ruby-on-rails

说我有600.00的笔记本电脑。说我把它改成$ 650.00。购物车如何处理?他们喜欢将价格存放在购物车或商品中吗?他们如何确保他们获得他们想要的价格,而不是在不问他们的情况下向客户收取新的变更费用?或者大多数将它们存储在两者中?

我在想也许我可以将它存储在两者中。 因此,如果当前价格超过商品的购物车价格,请不要将其从购物车中移除/开票。之后,告诉他们收取的费用/通过电子邮件发送未收到更改的项目的收据(比如他们有多个项目)并将其从购物车中删除。对于确实发生变化的商品,请说出“由于价格变动而在购物车中留下的商品,请检查您是否仍想以新价格购买商品。”因此,请保留购物车中更改的商品,但要更新购物车中的价格。

这就是我如何做到这一点的想法。我不认为语言应该重要。猜猜这更像是一个逻辑类型的问题。大多数购物车是这样做的还是有更好的方式?

3 个答案:

答案 0 :(得分:3)

简单的购物车只是通过会话和cookie维护的产品阵列。你可以做任何你想做的事。只需确保用户无法做任何他们想做的事情,例如通过网址更改价格。但最重要的是使用户非常,非常非常容易结账。

大多数开发人员将创建一个包含产品对象的数组,因此如果对产品进行任何更改,购物车将反映此更改。但是,如果您更改价格然后显而易见,如果用户点击价格然后您更改它并且用户在他们支付或变得困惑之后看不到这种变化,那么在购物体验中价格会上涨时会出现问题

在维护订单项方面,如果您有用户在将商品添加到购物车之前登录,那么您无需担心创建Cookie /会话来存储订单项的数组,直到他们执行结帐并将订单项与其信息一起保存,以供日后参考。

在这种情况下,您要做的是创建与对象关联的订单项,以便您可以获取所有产品信息,但同时将价格存储在实际的LineItem模型中,以便你确实更新了价格,不会影响购物者的购买体验。

如果您希望用户支付更高的价格,因为您改变主意并希望使用订单项模型,您可以执行最后一段中的内容并在用户决定结帐之前检查价格。如果它不同,那就让他们不要说这个产品现在是购买的数量,不要忘记道歉。

答案 1 :(得分:2)

简短的回答,一切都取决于它的编码方式。

我认为您正在谈论的交易正在进行中。如果在用户完成交易后价格发生变化,那么在客户服务方面它将被视为“坏事”,并且在您的支付处理器眼中可能是非法的。

我喜欢你比较购物车价格和最新价格的想法。但是,如果用户可以更改请求中项目的价格值以查看购物车,则可能会导致许多实际收费问题。例如,如果用户将笔记本电脑的价格改为1200美元,并且在您的代码中,您通过差异减少了购物车中的价值,他们可以将该笔记本电脑的价格降至0美元,这将是一个“糟糕的事情”。

$ 1200 - 用户输入  600美元 - 实际价格 - 600美元 - 价格调整    0美元 - 价格客户收费?

另一个例子是,如果您将商品的价格设为用户可以编辑的价值,并且他们是恶意用户,他们可能会将价格更改为 - $ 600.00,这又是一个“坏事”。

更安全的方法是将项目的商品ID存储在购物车的链接中以查看购物车,然后每次购买时都检索/更新购物车中商品的价格(总计,等请求购物车。这样,如果恶意用户尝试了加号或减号技巧,他们只会收到价格已更新为“当前价格”的消息。

OWASP网站有一些开源安全工具,可以帮助您测试代码,防止用户试图高举购物车。他们的地址是http://www.owasp.org

答案 2 :(得分:0)

如果购物车只包含对商品的引用(例如ID /主键),则无需将价格存储在两个地方。您只需在需要时从购物车中加载对象,价格将自动反映更改。在大多数情况下,这些变化很少,从用户的角度来看并不是什么大不了的事。