【发布时间】:2018-09-26 15:32:29
【问题描述】:
我正在尝试截断 Django-Oscar 的结帐流程。假设我们从购物篮/购物车开始,默认流程如下所示:
- 用户点击“继续结帐”按钮
- PaymentMethodView 被调用
- “付款详情”页面加载
- 用户点击“继续”
- Oscar 的“预览”加载。用户点击“下订单”并购买商品
- 用户被转到 Oscar 的“感谢”页面并收到一封电子邮件确认
我想要这个:
- “继续结帐”按钮已替换为 PayPal Checkout Express 客户端 checkout.js 按钮
- 用户点击 PayPal 按钮并付款
- 用户被转到 Oscar 的“感谢”页面并收到一封电子邮件确认
问题是这样的:PayPal 按钮可以正常工作,并且每次都可以成功付款,但是 Oscar 会在付款后交替将用户发送到“付款详细信息”页面和“感谢”页面。说清楚:
- 用户购买了一件商品,并被发送到“谢谢”页面并收到一封电子邮件
- 用户购买了另一件商品,被发送到“付款详情”页面,但没有收到电子邮件,即使付款成功,Oscar 也没有注册购买
- 用户购买第三件商品并在步骤 1 中体验 Oscar 的响应
- 用户购买第四件商品并在步骤 2 中体验 Oscar 的响应
- 等等,无穷无尽
到目前为止,所有 url、视图和模型都可以完美运行。此时我唯一要做的就是用 PayPal 的按钮替换“继续结帐”按钮。
然后我删除了 PayPal 按钮,并恢复了“继续结帐”按钮,但只进行了一次编辑。按钮如下所示:<a href="{% url 'checkout:index' %}" class="...">{% trans "Proceed to checkout" %}</a>。
我将'checkout:index' 替换为'checkout:preview' 以查看是否可以跳过“付款详细信息”页面。交替的情况继续。 Oscar 首先将用户引导至“预览”页面,然后在下一回合将用户引导至“付款详情”页面。
我也尝试过覆盖 PaymentMethodView:
from oscar.apps.checkout.views import PaymentMethodView as BasePaymentMethodView
from django.shortcuts import redirect
class PaymentMethodView(BasePaymentMethodView):
def get_success_response(self):
return redirect('thank-you')
“付款详情”和“感谢”页面之间的交替仍然存在。
我没有想法。可能出了什么问题?
【问题讨论】:
-
所以你已经覆盖了
checkout.views.IndexView对吧?你能展示你的(编辑的)来源吗?此外,您的basket(其id用于order_number)在付款成功/失败后没有得到正确处理(冻结/解冻/重置)可能值得调查。除非您显示您的PaymentDetailsView或您的IndexView自定义设置,否则不能说任何话。 -
@AshishNitinPatil 我没有覆盖 IndexView 和 PaymentDetailsView。我确实玩了 PaymentDetailsView 一点点,但我把它恢复为默认值。我会看看篮子,看看情况如何。谢谢!
-
奇怪,那么我不确定您是如何处理几乎单页的结帐的。无论如何,篮子问题肯定会引发错误,因此,除非您看到错误,否则您不应该真正担心这一点。
标签: django-oscar