5

所以我有一个多页结账系统,它依赖会话来存储购物车的内容。我还使用第三方系统来处理信用卡,该系统在其服务器上托管实际支付页面。我只需要将最终总数发布到页面上。

我预见的问题是,如果有人点击进入托管支付页面,然后出于某种合法或邪恶的原因更改另一个选项卡中的购物车内容会怎样。我最初计划当托管支付页面重定向回我的收据页面时,我会将订单插入到我的数据库中。但是,如果此时更改会话,则订单将与收取的总费用不同。

有什么办法可以解决这个问题。我可以看到这种事情对于所有购物车系统都是一个问题,所以我想知道他们是如何做到的。

也许当用户单击按钮转到托管支付页面时,我可以在数据库的 temp_order 表中创建一个临时订单条目,然后当付款通过时,我可以将该临时记录转移到永久记录表中?这样我就不会从已更改的会话信息中插入记录。但是如果我必须发布到托管支付页面,我在哪里有机会将购物车保存到临时表?

此外,临时订单 ID 在临时表和永久表中必须是唯一的,因为我不希望有任何重叠。

最后,我应该经常清除临时订单表,因为它们只是临时记录。有些可能不会通过,因为用户可能会在托管的支付页面上改变主意。

我真的很困惑我该怎么做!

4

3 回答 3

2

我认为没有必要创建一个单独的表。例如,只需在现有表中添加一列, payment_in_progress并在客户向购物车提交任何更改时对其进行分析。

清除未处理的过期订单的要求仍然存在

于 2012-09-28T19:35:19.150 回答
1

当支付网关返回时,只需将收到的金额存储在购物车中,如果收到的金额少于总金额,则将它们放回支付页面,显示未支付的余额。

于 2012-09-28T19:43:51.250 回答
1

除非支付系统在最终处理订单之前将控制权交还给您的网站,例如 PayPal Express Checkout,否则无法控制结帐流程。单向结账系统实际上是单向的。后续管理是手动的(通过付款收据)或由服务器到服务器的通知处理。

一旦您提交到其他网站,直接发布到支付网站不会给您任何控制权。最好的情况可能是您将订单作为 UNPAID 订单提交到您的数据库,然后提供一个页面,上面写着“您快完成了。继续付款。” -- 此时,您还应该清空客户的购物车,这样他们就无法更改处理中的订单(已在您的数据库中)。当支付系统重定向回您的网站时,您只需查找未付款的订单并将其标记为已付款。验证付款金额也是一个好主意,以防万一用户修改 POST 数据以减少付款。

编辑:
您可能真的需要一个支付网关解决方案,让您更好地控制结帐过程。您的担忧是真实的,但通常无法使用支付流程充分解决这些问题,这些支付流程无需先设置交易服务器端就直接将用户从您的网站发送出去。

于 2012-09-28T19:41:10.253 回答