我有一个非常标准的设置,一个带有购物车的电子商务应用程序,以及在本地数据库中存储订单的能力(需要知道从批发商处订购哪些商品以及将它们运送到哪里)。
目前,所有这些功能都运行良好。我目前的“结帐”允许客户输入他们的详细信息,然后保存订单,每个订单都有多个订单项目。
我想要做的是使用此表单将一些信息发送到 strip ,如果收到指示成功的 token ,则将一些(但不是全部)字段保存到本地数据库。
我并不是试图在本地保存 CC 数据或类似的内容,我很清楚安全风险和 PCI 合规性等法律义务。
我只是希望客户可以使用一种表单来输入数据,然后单击付款(就像大多数电子商务网站那样),而不是使用一种表单来输入数据,然后使用另一种表单来付款。
django-stripe 文档非常缺乏,而且 Stripe API 文档似乎只有 ruby 框架和 javascript 的示例,没有 django 的示例。
我想做的事情是否可行?如果可行,正确的方法是什么?
如果需要,我可以发布我的模型、表单、 View 和模板片段,但这似乎是一个逻辑和方法问题,而不是特定于代码的问题。
最佳答案
使用过 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 <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/