实施Django-oscar COD

时间:2017-04-14 09:11:01

标签: python django django-oscar

现在已经有一周了,我无法弄清楚在django-oscar实施COD的方法。如果有人至少让我开始完成这项任务,我将非常感激。我曾尝试使用少量的Github存储库,但它们已经过时或不够清晰,无法与项目一起使用。一个良好的开端将足以让我从头开始。 感谢

2 个答案:

答案 0 :(得分:1)

我还没有为奥斯卡实施COD,但是我已经在奥斯卡源代码中挖掘了几个星期的另一个非标准支付集成。困难的部分是付款涉及结账,购物篮,合作伙伴,订单和付款应用程序。保持原始checkout views.py文件的源代码关闭,并经常引用它。

那么关键步骤是什么:

  1. 所有付款处理均在结帐应用的PaymentDetailsView中进行,因此您需要一个分叉结帐应用来开始创建自定义PaymentDetailsView子类。
  2. 您需要覆盖 submit()方法,您可以在其中创建订单号,冻结购物篮,将其保存在会话中并发送pre_payment信号(只需复制/粘贴源代码)。由于此处不会付款,因此您需要在此时从自定义submit()实施中删除该部分。
  3. 然后,您必须像付款一样继续,并致电 handle_order_placement(),这将调用 handle_successful_order()
  4. 之后,当您的产品到货时付款,您需要为相关的订单号实施 handle_payment(),并触发post_payment信号。
  5. 简而言之就是这样,但显然还需要一些异常处理。希望这会让你开始!

答案 1 :(得分:1)

我最近在django-oscar上实施了COD。这就是你需要做的事情。

你应该了解奥斯卡的结账过程是如何运作的。 让我告诉你一下。有一个结帐'在奥斯卡的应用程序,处理所有的付款,下订单的东西。所以,首先你需要使用以下命令来分叉该应用程序。

./manage.py oscar_fork_app checkout apps/shop

然后在INSTALLED_APPS设置中添加它。

现在,如果您仔细查看结帐应用程序的views.py,则会有此类PaymentDetailsView处理下订单和付款内容。

现在,在您的preview.html页面上,您可以添加网关选项作为' cod'。当用户选择这个' cod'选项并提交“下订单”,您可以在分叉类handle_payment的{​​{1}}方法中检查提交的网关代码。

PaymentDetailsView

当您从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

询问是否有任何其他查询。