2017-04-14 26 views
3

现在已经有1周了,我无法弄清在django-oscar中实现COD的方式。如果有人至少让我开始完成这项任务,我将非常感激。我试过使用几个Github存储库,但是它们已经过时或者不够清晰,无法与该项目一起使用。一开始就足以让我从头开始。 谢谢实现Django-oscar COD

回答

1

我还没有实现奥斯卡的COD,但我一直在挖掘奥斯卡源代码数周以进行另一种非标准的支付集成。难题在于付款涉及结账,购物篮,合作伙伴,订单和付款应用程序。关闭原始结帐views.py文件的源代码,并经常引用它。

那么什么是关键步骤:

  1. 所有付款处理发生在结账应用程序的PaymentDetailsView,所以你需要一个分叉结账应用入手,以创建一个自定义PaymentDetailsView子类。
  2. 您需要覆盖submit()方法,您可以在其中创建订单号,冻结购物篮,将其保存在会话中并发送pre_payment信号(仅复制/粘贴源代码)。由于付款不会在这里进行,因此您需要在此时从您的自定义提交()实现中删除该部分。
  3. 这样您就可以继续仿佛支付已经发生,并调用handle_order_placement(),它将调用handle_successful_order()
  4. 之后,当支付已经发生的您的产品的到来,您将需要在对相关订单号执行handle_payment(),并触发post_payment信号。

这就是简单的说明,但显然还有一些需要的异常处理。希望这会让你开始!

+0

谢谢你的帮助,我会执行它。 –

+0

您不应该重写submit()方法。只需要实现handle_payment()方法。 – Jay

1

我最近在django-oscar上实现了COD。这是你需要做的。

您应该了解oscar的结帐过程如何工作。 让我告诉你一下。在奥斯卡有一个“结账”应用程序处理所有的付款,像订购东西一样下订单。所以,首先你需要用下面的命令来分发这个应用程序。

./manage.py oscar_fork_app checkout apps/shop 

然后在设置中将其添加到INSTALLED_APPS

现在,如果仔细查看结帐应用views.py,这个类PaymentDetailsView可以处理订购和付款事宜。

现在,在您的preview.html页面中,您可以将网关选项添加为'cod'。当用户选择这个'cod'选项并提交'下订单'时,你可以检查分叉类PaymentDetailsViewhandle_payment方法提交的网关代码。

CorePaymentDetailsView = get_class('checkout.views', 'PaymentDetailsView') 

class PaymentDetailsView(CorePaymentDetailsView): 
    """ 
    currently used to redirect to preview page 
    Handles the payment and cod. 
    """ 
    def handle_payment(self, order_number, total, **kwargs): 
     self.amount = float(total.excl_tax) 
     gateway_code = self.request.POST.get('gateway_code', None) 
     if gateway_code and gateway_code == 'cash-on-delivery': 
      # Record payment source and event 
      source_type, is_created = SourceType.objects.get_or_create(
       name='cash-on-delivery') 
      source = source_type.sources.model(
       source_type=source_type, 
       amount_allocated=total.excl_tax) 
      self.add_payment_source(source) 
      self.add_payment_event('CREATED', total.excl_tax) 
      return 

当您从handle_payment方法返回,它继续执行同一类的submit方法和下订单。

之后,你可以在仪表板提到,该产品有cash-on-delivery选项。交付后,您可以捕获另一个付款事件'CASH-RECEIVED'

询问是否有其他查询。

+0

让我试试吧,我会让你知道的。感谢您的帮助,我真的失去了对它的希望。 –

+0

是的。别担心。慢慢来。 – Jay