现在已经有1周了,我无法弄清在django-oscar中实现COD的方式。如果有人至少让我开始完成这项任务,我将非常感激。我试过使用几个Github存储库,但是它们已经过时或者不够清晰,无法与该项目一起使用。一开始就足以让我从头开始。 谢谢实现Django-oscar COD
回答
我还没有实现奥斯卡的COD,但我一直在挖掘奥斯卡源代码数周以进行另一种非标准的支付集成。难题在于付款涉及结账,购物篮,合作伙伴,订单和付款应用程序。关闭原始结帐views.py文件的源代码,并经常引用它。
那么什么是关键步骤:
- 所有付款处理发生在结账应用程序的PaymentDetailsView,所以你需要一个分叉结账应用入手,以创建一个自定义PaymentDetailsView子类。
- 您需要覆盖submit()方法,您可以在其中创建订单号,冻结购物篮,将其保存在会话中并发送pre_payment信号(仅复制/粘贴源代码)。由于付款不会在这里进行,因此您需要在此时从您的自定义提交()实现中删除该部分。
- 这样您就可以继续仿佛支付已经发生,并调用handle_order_placement(),它将调用handle_successful_order()
- 之后,当支付已经发生的您的产品的到来,您将需要在对相关订单号执行handle_payment(),并触发post_payment信号。
这就是简单的说明,但显然还有一些需要的异常处理。希望这会让你开始!
我最近在django-oscar上实现了COD。这是你需要做的。
您应该了解oscar的结帐过程如何工作。 让我告诉你一下。在奥斯卡有一个“结账”应用程序处理所有的付款,像订购东西一样下订单。所以,首先你需要用下面的命令来分发这个应用程序。
./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'
。
询问是否有其他查询。
让我试试吧,我会让你知道的。感谢您的帮助,我真的失去了对它的希望。 –
是的。别担心。慢慢来。 – Jay
- 1. 解释$ logline {$ cod} {s1} =标量键%{$ valid {$ cod}};
- 2. 为Blackberry生成COD文件
- 3. WooCommerce:为现金付款方式(cod)添加费用
- 4. 我想在prestashop中完成100个cod命令时禁用cod 0
- 5. 如何在黑莓应用程序中将多个cod文件合并为单个cod文件。
- 6. 黑莓多MyApp - #cod文件签名时
- 7. .cod部署到模拟器的问题
- 8. 问题与.cod文件的大小
- 9. 以编程方式更改cod-file
- 10. 如何检索COD文件的内容?
- 11. Delphi中的数组实现xe6
- 12. 实现polynimial类实现
- 13. 。bcrypt的实现,实现HashAlgorithm?
- 14. 实现
- 15. 实现
- 16. 实现
- 17. 实现
- 18. IRepository - 实体实现
- 19. 黑莓模拟器不创建COD文件
- 20. 下载.jad或.cod文件并从网站安装
- 21. .cod数据部分大到运行黑莓webworks项目时
- 22. “Class Not found”从j2me jar文件编译运行cod文件
- 23. 签署.COD文件时遇到的问题
- 24. CPython内部实现的文档实现
- 25. 使用ServiceStack实现多个ICacheClient实现
- 26. JMS使用Scala实现队列实现
- 27. 有没有实现HttpServletRequest的ServletRequest实现?
- 28. Fermat的小实现问题的实现
- 29. 如何在Delphi中实现XIRR实现?
- 30. 用Python实现sftp服务器实现
谢谢你的帮助,我会执行它。 –
您不应该重写submit()方法。只需要实现handle_payment()方法。 – Jay