处理重定向到基于表单的支付网关的订单 before/after

Handling an order before/after redirecting to a form-based payment gateway

我正在使用电子商务框架 django-oscar (Oscar)。 在 Oscar 中,结帐流程如下所示:

  1. 收集送货信息。
  2. Select 付款方式并收集付款详情。
  3. 预览订单并确认。
  4. 冻结购物篮(以防止操纵),处理付款并下订单。

我正在集成基于表单的支付网关(需要发布包含付款详细信息的表单),现在结帐流程变得混乱:

我遇到了这些问题:

1) (c) 和 (d) 必须一步完成,因为在 (e) 之前网站和用户之间没有互动 - 我无法 POST- 重定向客户到支付网关,因此单击 'confirm' 会直接将 him/her 移动到那里。由于在显示预览页面时已经下了订单,因此客户不可能从那里返回 - 购物篮将是空的。我可以在预览和支付网关之间放置另一个页面,但这看起来不像是一个优雅的解决方案。还有一个吗?

2) 下订单意味着分配商品并将其从库存中移除(其他客户将无法购买),否则当客户 returns 来自支付网关时,一些商品可能变得不可用。不可避免地会有一些订单未付款,因此商品将被保留。他们应该在什么时候以及如何 'unreserved' 回到库存中?

在我看来,这些问题并不是奥斯卡特有的,那么处理这些问题的最佳做法是什么?

谢谢!

P.S。我在 Oscar (https://groups.google.com/forum/#!topic/django-oscar/ccClzX6M9To , ) 中发现了一些关于集成基于表单的支付网关的讨论,但没有关于概述问题的讨论。

交易完成后从库存中移除产品。 并为客户显示新的订单号。

让客户知道他们将收到一封电子邮件,其中包含所有相关详细信息,包括他们刚刚订购的产品。

获取购物车商品并将它们插入订单商品数据库 table。换句话说,public 购物车 table 应该与您用来存放订单商品的 table 完全分开。那么您就不必担心 'freezing' 购物车 table 等

What if the products become unavailable while the customer is on a payment gateway (some one else buys them faster)?

对于大多数商家来说,这种情况不会经常发生。但在正常业务过程中,产品缺货的情况会有所不同。商家然后联系客户,看看是否有另一件商品是 suitable,否则他们会退还交易。

也就是说,如果您有特定座位的音乐会门票或几分钟内售罄的限量版印刷品,那么您需要一个不同的系统。

基本上,您会预先告诉客户您将保留该商品 5 分钟 - 足够他们完成交易的时间。并且您在每一步都提醒他们,如果他们没有完成购买,他们可能会丢失物品。