现在已经1周了,我还不知道在django-oscar中实现COD的方法。如果有人能至少给我一点时间来完成这项任务,我将不胜感激。我尝试使用了一些Github存储库,但它们要么过时了,要么不够清晰,无法与项目一起使用。领先一步对我来说已经足够让我从头开始。谢谢
发布于 2017-04-14 17:37:41
我还没有为Oscar实现COD,但我已经在oscar源代码中挖掘了几周的时间,用于另一个非标准的支付集成。困难的部分是付款涉及结账,篮子,合作伙伴,订单和支付应用程序。保留原始签出views.py文件的源代码,并经常引用它。
那么关键的步骤是什么:
简而言之,这就是问题所在,但显然也需要一些异常处理。希望这篇文章能帮你入门!
发布于 2017-06-03 13:39:49
我最近在django-oscar上实现了COD。这是你需要做的。
您应该了解oscar的结帐过程是如何工作的。让我来告诉你一些细节。在oscar中有一个“结账”应用程序,它处理所有的付款,像下单一样下单。因此,首先您需要使用以下命令派生该应用程序。
./manage.py oscar_fork_app checkout apps/shop然后将其添加到INSTALLED_APPS at设置中。
现在,如果你仔细查看结账应用程序的views.py,就会发现有这样一个类PaymentDetailsView,它处理下单和付款。
现在,在您的preview.html页面上,您可以将网关选项添加为'cod‘。当用户选择此“cod”选项并提交“place order”时,您可以在派生类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'。
询问是否有任何其他问题。
https://stackoverflow.com/questions/43408588
复制相似问题