人们结账时保证正确的金额?

时间:2011-03-04 10:16:01

标签: php payment-processing

我有一个问题,我似乎无法弄清楚。 我有一个网站,你可以选择一些优惠并购买。 此过程的步骤如下:

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

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

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

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

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

这通常是如何处理的?我刚接触付款。

感谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

支付提供商通常的做法如下:

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

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

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