从 Stripe checkout 传递金额以查看 Django 中的函数

Pass amount from Stripe checkout for to view function in Django

我有几个 classes 我们卖了,我正在设置 Stripe。如果我只有一个 class 在视图中有固定价格,一切都很好,但我有 6 个 class 需要能够收费。我能否将值从模板表单传递到视图,以便我可以使用相同的视图收取不同的金额?

这是我的代码,适用于单个 class:

查看

def charge(request):
    if request.method != 'POST':
        return redirect('training')

    if 'stripeToken' not in request.POST:
        messages.error(request, 'Uh oh, something went wrong, please try again!')
        return redirect('training_classes')

    customer = stripe.Customer.create(
        email=request.POST['stripeEmail'],
        source=request.POST['stripeToken'],
    )

    amount = 2000

    stripe.Charge.create(
        customer=customer.id,
        currency='usd',
        amount=amount,
        description='Food Handlers Card'
    )

    messages.success(request, 'Success')
    return redirect('training')

形式

<form action="{% url 'charge' %}" method="POST">
  {% csrf_token %}
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="{{ key }}"
    data-image="/img/documentation/checkout/marketplace.png"
    data-name="Food & beverage Association of San Diego County"
    data-description="Food Handlers Card"
    data-amount="2000"
    data-allow-remember-me="false"
    data-label="Pay As Member">
  </script>
</form>

对于我们提供的 classes,我需要一些这样的表格,但它们的价格不同。任何帮助是极大的赞赏。谢谢。

您想在包含 Stripe Checkout 的表单中添加额外的输入,以将额外的值传回您的控制器:

<form action="{% url 'charge' %}" method="POST">
  {% csrf_token %}
  <input type="hidden" name="amount" value="2000"></input?
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="{{ key }}"
    data-image="/img/documentation/checkout/marketplace.png"
    data-name="Food & beverage Association of San Diego County"
    data-description="Food Handlers Card"
    data-amount="2000"
    data-allow-remember-me="false"
    data-label="Pay As Member">
  </script>
</form>

然而,这通常被认为是不安全的,因为客户可以修改金额。

你通常想要做的是传递一些关于客户购买的信息(如 SKU/产品代码)并将其作为隐藏输入传递,或者甚至更好地将这些信息保存在某种服务器端会话状态。

服务器端您可以通过 request.POST 字典访问任何这些值,例如 request.POST['amount']