我正在创建一个非常简单的商店,其中包含一个产品,用户可以选择不同的选项,并且根据所选的选项,这将生成商品的总成本。因此,例如,如果用户选择红色变体,则价格将增加5%,如果用户选择蓝色变体,则价格将增加10%。
目前我正在使用jQuery进行计算,然后将它们传递给空字段,然后将其发布到支付网关。这种方法安全吗?从理论上讲,用户可以打开Firebug或Chrome开发者工具并在将其发布到网关之前编辑该值(为零),但这不适用于类似的产品变异计算方法吗?我想弄清楚这是否是一个问题,但是有更好的方法吗?
答案 0 :(得分:2)
这绝对是一个问题,因为您自己说用户可以修改值。
因此,您将在客户端向用户显示价格,无论该值如何生成都无关紧要,因为它永远不会被服务器信任,也永远不会传递给支付网关。
用户按“立即购买”,重定向到支付网关,但首先通过您自己的服务器。服务器应验证产品并计算价格。
最终价格(由您自己的服务器计算)将在付款时向用户显示。
在客户端,您可以继续使用JQuery生成值,或让服务器通过AJAX请求返回它们。但这只是为了用户体验,价值不可信。
答案 1 :(得分:1)
PayPal付款完成后,PayPal会将IPN(即时付款通知)消息发送到您指定的网址。您必须重新发送该消息以验证该消息是否来自PayPal原件。在此之后,为了确保用户支付了适当的金额,您可以从IPN获得值(它可能带有用户ID。事务ID等等)并使用您的数据库进行检查。
一些有用的链接:
电子商务网站中的第一条规则:绝不信任用户 所以,这是正确的过程:
使用jQuery进行计算,然后将它们传递给空字段,然后将其发布到支付网关,将用户名/ ID,事务和金额存储在数据库中。使用paypal的IPN响应创建验证存储值的方法。
如果值匹配,则付款成功。否则,请将其标记为以后的手工验证(您应该存储该ID,以便在paypal上更容易找到)。
答案 2 :(得分:1)
如果您选择此方法,您可能会在隐藏字段中存储产品配置(如字符串表示JSON或逗号分隔字段等),计算价格(客户端或服务器端)并仅显示价格作为信息给客户。
当他提交配置时,验证它并在服务器上再次计算pice。
客户可以改变配置(通过Firebug等),但由于根据配置计算,因此无法更改价格。
嗯,我就是这样做的。