【问题标题】:Pass amount from Stripe checkout for to view function in Django从 Stripe 结帐中传递金额以在 Django 中查看功能
【发布时间】:2016-06-05 20:59:12
【问题描述】:

我有几个我们出售的课程,我正在设置 Stripe。如果我在视图中只有一个固定价格的课程,那么一切都会很好,但是我有 6 个课程需要收费。我可以将模板表单中的值传递给视图,以便我可以对同一个视图收取不同的金额吗?

这是适用于单个类的代码:

查看

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>

对于我们提供的课程,我将需要其中一些表格,但它们的价格不同。任何帮助是极大的赞赏。谢谢。

【问题讨论】:

    标签: django django-models django-templates django-views stripe-payments


    【解决方案1】:

    您希望在包含 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'])访问这些值中的任何一个

    【讨论】:

    • 谢谢马修。我将FHC_CHARGE_M = 3000 添加到我的设置文件中,然后将'fhc_charge_m': settings.FHC_CHARGE_M, 添加到退货请求内的页面视图中,然后将&lt;input type="hidden" name="amount" value="{{ fhc_charge_m }}"/&gt; 添加到我的表单中。它传递了金额,但现在只是停留在如何将其传递给视图中的“金额”变量。有任何想法吗?谢谢。
    • 您只是将金额传递到视图中。 data-amount="{{ fhc_charge_m }} 也可以使用
    • 也许我正在丢失它...我可以将它传递给它,它会显示在弹出窗口中,但收费视图定义有一个需要设置的“金额”变量。如何将表单中的数据量传递给视图中的“数量”变量。这有意义吗?对不起,如果我不是太清楚,我还是有点黑 :) 再次感谢你。
    • 啊,视图函数是大多数人所说的“控制器”,读取输入只是 request.POST['amount'],(也就是“名称”是什么)
    • 这很有趣,我正要评论说我想通了...如果不是您对我的帖子的原始回复,我不会在此寻找解决方案方向。您能否将解决方案放在我可以接受的正确答案中?感谢您的帮助。
    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2021-08-05
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多