2

我正在创建一个非常简单的商店,其中包含一种产品,用户可以在其中选择不同的选项,并且根据选择的选项,这将产生该项目的总成本。例如,如果用户选择红色变体,价格将上涨 5%,如果用户选择蓝色变体,则价格将上涨 10%。

目前我正在使用 jQuery 进行计算,然后将它们传递到一个空字段,然后将其发布到支付网关。这种方法安全吗?从理论上讲,用户可以打开 Firebug 或 Chrome 开发者工具并在将其发布到网关之前编辑值(为零),但这难道不能适用于类似的产品变化计算方法吗?我试图弄清楚这是否是一个问题,但有没有更好的方法?

4

3 回答 3

2

这绝对是一个问题,正如您自己所说,用户可以修改这些值。

  • 因此,您将在客户端向用户显示价格,该值是如何生成的并不重要,因为它永远不会被服务器信任,也永远不会传递给支付网关。

  • 用户按下“立即购买”,被重定向到支付网关,但首先通过您自己的服务器。服务器应验证产品并计算价格。

  • 最终价格(由您自己的服务器计算)将在付款时显示给用户。

在客户端,您可以继续使用 JQuery 生成值,或者让服务器通过 AJAX 请求返回它们。但这只是为了用户体验,这些值是不可信的。

于 2013-05-23T14:31:49.947 回答
1

在进行 PayPal 付款后,PayPal 会向您指定的 url 发送 IPN(即时付款通知)消息。您必须重新发送以验证消息是否来自 paypal。之后,为了确保用户支付了正确的金额,您可以从 IPN 获取值(它可能带有用户 ID。交易 ID 等等......)并使用您的数据库检查它们。

一些有用的链接:

更多关于 IPN

贝宝开发者指南

皮亚帕尔IPN

电子商务网站的第一条规则:永远不要信任用户所以,这是正确的过程:

使用 jQuery 计算后,将它们传递到一个空字段,然后将其发布到支付网关,将用户名/ID、交易和金额存储在数据库中。创建使用来自贝宝的 IPN 响应验证存储值的方法。

如果值匹配,则支付成功。否则,标记它以供以后手动验证(您应该存储 id,以便在 paypal 上更容易找到)。

于 2013-05-23T14:28:18.360 回答
1

如果您选择此方法,您可能应该将产品配置(如字符串表示或 JSON 或逗号分隔字段等)存储在隐藏字段中,计算价格(客户端或服务器端)并将价格仅作为信息显示给客户.

当他提交配置时,验证它并在服务器上再次计算 pice。

这样客户可以更改配置(通过 Firebug 左右),但不能更改价格,因为它是根据配置计算的。

好吧,我就是这样做的。

于 2013-05-23T14:31:28.113 回答