django - 如何将stripe payment与现有的django表单集成,并且仅在付款成功时保存表单

标签 django django-forms stripe-payments

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

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

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

我并不是试图在本地保存 CC 数据或类似的内容,我很清楚安全风险和 PCI 合规性等法律义务。

我只是希望客户可以使用一种表单来输入数据,然后单击付款(就像大多数电子商务网站那样),而不是使用一种表单来输入数据,然后使用另一种表单来付款。

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

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

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

最佳答案

使用过 Stripe 后,它实际上拥有令人惊叹的文档。您要查找的内容位于 Stripe API Referencecharge 部分下。 。您还需要创建一个 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 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c7ada2a9a9bee9b5a8b4a2a987a2bfa6aab7aba2e9a4a8aa" rel="noreferrer noopener nofollow">[email protected]</a>"
        )

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

        return redirect('app:fail_page')

关于django - 如何将stripe payment与现有的django表单集成,并且仅在付款成功时保存表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092240/

相关文章:

python - 如何在 Django 中添加对评论的回复?

javascript - 类似于 Wufoo 的 Web 界面(可拖动元素、记住状态)

django - 优化的 Django 查询集

带有 OnetoOne 字段的 Django CreateView/UpdateView 取决于记录是否存在

html - 如何自定义 django-uni-form 样式的表单?

python - 如何使用 ManyToMany 字段填充默认表单数据?

php - 为什么Stripe的webhooks不需要验证签名?

javascript - 使用 php catch 显示 stripe 中的错误

python - 在 Django 中使用请求解析 JSON

stripe-payments - 从 Stripe API 检索支持的国家/地区列表?