将订单创建移至客户完成结帐时

Moving order creation to when customer completes checkout

我们使用 Django-oscar 的电子商务网站目前处理用户付款后的订单创建,这可能会导致 https://github.com/django-oscar/django-oscar/issues/2891 中描述的问题。我们希望在用户完成结帐后切换为创建状态为 pending 的订单,然后在付款完成后履行订单。

我们目前不确定这样做的后果是什么,所以我希望找到一些关于此订单创建流程的示例,以便在我们的过渡中参考。 Django-oscar 是否默认使用此流程开箱即用,或者是否存在我们可以检查示例的现有开源应用程序?

提前感谢您的帮助

技术细节:

Python version: 2.7  
Django version: 1.11  
Oscar version: 1.6

这是一个比较宽泛的问题,很难给出一个简洁的答案,但是关于如何实现这个问题的一些建议:

  • Oscar 不会对您的订单工作流程做出很多假设。您可以定义一个 pipeline 来描述您想要的订单状态,以及订单可以在状态之间进行的转换。定义后,员工可以轻松地从仪表板设置订单状态,或使用 Order.set_status().

  • 以编程方式执行此操作
  • 如果您实施 pending 状态,那么您可能需要覆盖在创建订单时 OrderPlacementMixin 中发生的一些默认行为 - 例如,您可能不想在此阶段发送订单确认电子邮件,在这种情况下,您需要覆盖 send_confirmation_message(),而是稍后发送电子邮件(例如,响应 order_status_changed 信号。

  • 完全取决于用例,但您可能需要考虑如果付款失败会发生什么情况。要求客户重新开始可能并不理想,在这种情况下,您可能需要一种方法来将失败订单中的商品预先填充到新购物篮中。

没有 public 以上的源代码,但 Oscar 都可以做到。