【问题标题】:Secure correct money amount when people checkout?人们结账时确保正确的金额?
【发布时间】:2011-07-08 17:20:17
【问题描述】:

我有一个问题,我似乎无法正确解决。 我有一个网站,您可以在其中挑选一些报价并购买。 此过程的步骤是:

1)客户选择他喜欢的报价(index.php)并进入(buy.php)页面

2) 在 (buy.php) 页面,他选择数量和付款方式

3) 当客户按下购买键时,他会被重定向到 (payment.php),所有数据都会在此再次验证并进行一些数据库记录。 Payment.php 页面将用户处理到选定的支付网关(在我的网站之外)。

所以问题是我可以将 $_POST 数据从 buy.php 页面交换到 payment.php 并且支付页面会认为数据是正确的。

在我只是检查支付页面的价格是否是我的 $array 中允许的价格之一之前,我对此没有任何问题。但是现在我提供了折扣,我无法判断进来的金额是否确实正确。

通常如何处理所有这些?我是付款新手。

谢谢。

【问题讨论】:

  • 永远不要在用户可访问的 POST 变量中传输支付数据。使用sessions。仅根据会话数据进行金额的最终计算。
  • 作为一种良好做法,无论您是否过滤用户,您都不应该接受用户的价格。最好将价格与数据库中具有价格字段的产品或报价 ID 相关联。在传输信用卡数据时,请务必使用 HTTPS。我相信这是美国托管网站的法律。
  • @PhpMyCoder,PCI 对信用卡处理的要求比“使用 https”要复杂得多。 PCI 标准非常复杂,以至于大多数人只使用带有支付网关的商家帐户,就像 @arma 所做的那样。
  • 我的网站未处理我将客户发送给第三方(银行或其他)的实际信用卡输入。问题是我似乎无法弄清楚如何在没有静态价格的情况下工作。就像如果我有 10 个数量并且价格是 1 美元,那么很容易确保正确的数量,但是如果我们有折扣,那么价格会与数据库价格不同。
  • @sarnold 感谢您的链接。我想我会把我所有的抄送处理留给贝宝。 @arma 尝试一个带有价格的产品 ID 数据库表和一个带有数量(或百分比)的折扣表。当用户提交订单时,将具有各自数量的产品 ID 以及任何折扣的 ID 发送到付款脚本。让它处理最终的价格计算。

标签: php payment-processing


【解决方案1】:

尝试使用包含价格的产品 ID 数据库表和包含金额(或百分比)的折扣表。当用户提交订单时,将产品的 ID 及其各自的数量连同任何折扣的 ID 一起发送到付款脚本。让它处理最终的价格计算。

【讨论】:

    【解决方案2】:

    支付提供商执行此操作的通常方式如下。

    • 您的表单将生成一个 POST 数组。
    • 使用散列向该数组添加一个字段。从字符串中生成此哈希,如下所示:
      • 定义一个秘密字符串(某种“盐”,但不同)
      • 按字母顺序对所有 POST 键进行排序。
      • 制作这样的字符串:
      • key=value.secretString.key2=value2.secretString ...等
      • 散列字符串并在帖子中发送。
      • (显然,请勿发送、显示或泄露您的秘密字符串)

    现在,当您收到 POST 时,您可以使用您的秘密字符串重新创建应该伴随它的散列,并将其与您获得的散列进行比较(当然也在帖子中,显然也不要散列)。如果相等,则为未被篡改的值。如果不是,您应该拒绝付款。

    由于您在帖子中还包含日期、用户/订单 ID 等,因此无法更改其他订单的帖子。更改帖子中的值之一也意味着必须更改 HASH,但由于用户无法创建它,因此不会这样做。

    【讨论】:

    • 感谢您的评论,所以我可以标记一些答案 :) 但是是的,我现在已经对其进行了排序。我只是使用数量和产品 id 并将它们传递到下一页,在那里向支付商家发出请求,而且没有办法(只能通过黑客支付商家)来搞乱东西。如果人们弄乱了 id 和数量,只给他们提供不同数量的不同产品,并且所有价格都正确应用。
    猜你喜欢
    • 2019-09-05
    • 2021-12-13
    • 2017-07-10
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2020-11-24
    • 2015-03-31
    • 2021-11-02
    相关资源
    最近更新 更多