【问题标题】:How to integrate stripe payment with existing django form, and only save form on payment success如何将条带支付与现有的 django 表单集成,并且仅在支付成功时保存表单
【发布时间】:2019-08-01 04:47:12
【问题描述】:

我有我想象中的一个非常标准的设置,一个带有购物车的电子商务应用程序,以及在本地数据库中存储订单的能力(需要知道从批发商那里订购什么商品以及将它们送到哪里)。

目前,所有这些功能都运行良好。我现在的“结帐”允许客户输入他们的详细信息,然后保存一个订单,每个订单都有几个订单项目。

我想要做的是使用这个表单发送一些信息到条带,如果收到一个指示成功的令牌,将一些(但不是全部)字段保存到本地数据库。

我不会尝试在本地保存 CC 数据或类似的东西,我非常了解安全风险和法律义务,例如 PCI 合规性。

我只想拥有一个表单,客户可以使用它来输入他们的数据并点击付款(就像大多数电子商务网站一样),而不是使用一个表单来输入数据,然后再使用另一个表单来付款。

django-stripe 文档非常缺乏,Stripe API 文档似乎只有 ruby​​ 框架和 javascript 的示例,没有 django 的示例。

我想做的事是否可行,如果可以,正确的做法是什么?

如果需要,我可以发布我的模型、表单、视图和模板 sn-ps,但这似乎是一个逻辑和方法问题,而不是特定于代码的问题。

【问题讨论】:

  • 在前端,你是自己获取 CC 数据还是使用 Stripe 的脚本之一?
  • @farooq 我还没有做出决定,我在单独的页面上有 checkout.js,但这不是我想要坚持的方法。

标签: django django-forms stripe-payments


【解决方案1】:

使用过 Stripe,它实际上有很棒的文档。您要查找的内容位于Stripe API Reference 中的charge 部分下。您还需要创建一个token(可以在服务器端通过 HTTPS 或在客户端通过 JS)。

您要做的实际上是先通过 Stripe 向用户收费,如果响应成功,将订单信息输入到您的数据库中。

一个例子是这样的:

from django.views.generic import View
import stripe
stripe.api_key = "sk_test_KEY_HERE"


class PaymentView(View):
    def post(self, request, *args, **kwargs):
        card_num = request.POST['card_num']
        exp_month = request.POST['exp_month']
        exp_year = request.POST['exp_year']
        cvc = request.POST['cvc']

        token = stripe.Token.create(
          card={
            "number": card_num,
            "exp_month": int(exp_month),
            "exp_year": int(exp_year),
            "cvc": cvc
          },
        )

        charge = stripe.Charge.create(
          amount=2000,
          currency="usd",
          source=token,  # obtained above
          #source="tok_visa", # obtained with Stripe.js (JS)
          description="Charge for jenny.rosen@example.com"
        )

        if charge['captured'] == True:
            Sale.objects.create(product=product, amount=amount)
            return redirect('app:success_page')

        return redirect('app:fail_page')

【讨论】:

  • 我听说 stripe 有很棒的文档,但是当我看到的主要链接是针对 ruby​​ 框架时就被抛弃了。我可能不太清楚,因为我还在学习 django/python。请原谅我缺乏知识,但我不知道这个示例代码在 django 项目中的位置。它似乎不是视图或模型。
  • 另外,澄清一下,当您提到首先向客户收费并在成功时保存表单数据时,这是否可以以一种对用户透明的方式从一个表单中完成?
  • 是的。你可以有一个表单,POSTs 一个条纹 token 到一个视图,并使用我提供的代码来处理费用,在你的数据库中创建一个条目来记录付款,然后将用户重定向到一个成功页面。请参阅上面的更新代码。
  • 啊,非常感谢!现在对我来说更有意义了!我期待着尝试实现这一点。
  • 没问题!一切都是为了更近一步。继续推动,直到你被难住,如果你需要,你总是可以问一个更精确的问题。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2021-03-17
  • 2021-10-07
  • 2020-10-30
  • 2016-01-02
  • 2016-01-19
  • 2020-11-18
相关资源
最近更新 更多