【发布时间】:2017-09-10 12:56:47
【问题描述】:
现在已经 1 周了,我无法弄清楚在 django-oscar 中实现 COD 的方法。如果有人至少可以让我领先一步来完成这项任务,我将非常感激。我尝试使用少数Github 存储库,但它们要么已过时,要么不够清晰,无法与项目一起使用。一个良好的开端足以让我从头开始。 谢谢
【问题讨论】:
标签: python django django-oscar
现在已经 1 周了,我无法弄清楚在 django-oscar 中实现 COD 的方法。如果有人至少可以让我领先一步来完成这项任务,我将非常感激。我尝试使用少数Github 存储库,但它们要么已过时,要么不够清晰,无法与项目一起使用。一个良好的开端足以让我从头开始。 谢谢
【问题讨论】:
标签: python django django-oscar
我最近在 django-oscar 上实现了 COD。这是您需要做的。
您应该了解 oscar 的结帐流程是如何运作的。 让我向你展示一下。 oscar 中有一个“结帐”应用程序,它处理所有付款,下订单之类的东西。所以,首先你需要用下面的命令 fork 那个应用程序。
./manage.py oscar_fork_app checkout apps/shop
然后将其添加到INSTALLED_APPS的设置中。
现在,如果您仔细查看结帐应用程序的 views.py,就会发现这个类 PaymentDetailsView 处理下订单和付款。
现在,在您的 preview.html 页面上,您可以将网关选项添加为“cod”。当用户选择此“cod”选项并提交“下订单”时,您可以在分支类PaymentDetailsView 的handle_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'。
询问是否有其他疑问。
【讨论】:
我还没有为 Oscar 实现 COD,但我已经在 oscar 源代码中挖掘了数周来寻找另一个非标准的支付集成。困难的部分是支付涉及结账、购物篮、合作伙伴、订单和支付应用程序。保留原始 checkout views.py 文件的源代码,并经常参考。
那么关键步骤是什么:
简而言之就是这样,但显然还需要一些异常处理。希望这能让你开始!
【讨论】: