首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现Django-oscar COD

实现Django-oscar COD
EN

Stack Overflow用户
提问于 2017-04-14 17:11:01
回答 2查看 699关注 0票数 5

现在已经1周了,我还不知道在django-oscar中实现COD的方法。如果有人能至少给我一点时间来完成这项任务,我将不胜感激。我尝试使用了一些Github存储库,但它们要么过时了,要么不够清晰,无法与项目一起使用。领先一步对我来说已经足够让我从头开始。谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-04-14 17:37:41

我还没有为Oscar实现COD,但我已经在oscar源代码中挖掘了几周的时间,用于另一个非标准的支付集成。困难的部分是付款涉及结账,篮子,合作伙伴,订单和支付应用程序。保留原始签出views.py文件的源代码,并经常引用它。

那么关键的步骤是什么:

  1. 所有的支付处理都发生在结账应用的PaymentDetailsView中,所以你需要一个分叉的结账应用来创建一个自定义的PaymentDetailsView子类。
  2. 你需要重写submit()方法,在这个方法中你可以创建一个订单号,冻结购物篮,将它保存在会话中并发送pre_payment信号(只需复制/粘贴源代码)。因为这里不接受付款,所以此时您需要从自定义submit()实现中删除该部分。当您的产品到达时,您需要为相关的订单号执行handle_payment(),并触发post_payment信号,然后调用handle_order_placement(),,当您的产品到达时,将调用handle_successful_order()
  3. Afterwards,的handle_payment()

简而言之,这就是问题所在,但显然也需要一些异常处理。希望这篇文章能帮你入门!

票数 3
EN

Stack Overflow用户

发布于 2017-06-03 13:39:49

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

您应该了解oscar的结帐过程是如何工作的。让我来告诉你一些细节。在oscar中有一个“结账”应用程序,它处理所有的付款,像下单一样下单。因此,首先您需要使用以下命令派生该应用程序。

代码语言:javascript
复制
./manage.py oscar_fork_app checkout apps/shop

然后将其添加到INSTALLED_APPS at设置中。

现在,如果你仔细查看结账应用程序的views.py,就会发现有这样一个类PaymentDetailsView,它处理下单和付款。

现在,在您的preview.html页面上,您可以将网关选项添加为'cod‘。当用户选择此“cod”选项并提交“place order”时,您可以在派生类PaymentDetailsViewhandle_payment方法中检查已提交的网关代码。

代码语言:javascript
复制
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'

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43408588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档