javascript - 无法使用 Stripe 创建信用卡 token (django)

标签 javascript python html django stripe-payments

我正在使用 django 作为网络应用程序,并且正在尝试使用 stripe 处理付款,但在创建 token 时遇到问题(我认为这是一个问题)。这是我的结帐页面的 html/javascript 代码

<head>
    <script type="text/javascript" src="https://js.stripe.com/v2/"></script>
</head>
<body>
     <form action="{% url 'checkout:p' %}" id="payment-form" method="post">
        {% csrf_token %}
        number:<input class="card-number" type='text'>
        cvc:<input class="card-cvc" type='text'>
        month:<input class="card-expiry-month" type='text'>
        year:<input class="card-expiry-year" type='text'>

        <script type="text/javascript">
            $('form').submit((fucnction(){
                var $form = $('#payment-form');
                Stripe.setPublishableKey('pk_test_KaWOobBc2ELxFoSoqmS1gtz2');

                Stripe.card.createToken({
                    number: $('.card-number').val(),
                    cvc: $('.card-cvc').val(),
                    exp_month: $('.card-expiry-month').val(),
                    exp_year: $('.card-expiry-year').val()
                        }, stripeResponseHandler);

                function stripeResponseHandler(status, response) {


                 if (response.error) {
                    // Show the errors on the form
                    $form.find('.payment-errors').text(response.error.message);
                    $form.find('button').prop('disabled', false);
                  } else {
                    // response contains id and card, which contains additional card details
                        var token = response.id;
                    // Insert the token into the form so it gets submitted to the server
                     $form.append($('<input type="text" name="stripeToken" />').val(token));
                    // and submit
                    $form.get(0).submit();
                  }
                }
            });
        </script>
        <input type="text" name="life" value=42>
        <button type="submit">Submit</button>
    </form>

</body>

然后这是我正在使用的 View 。

class CheckoutView(View):
    template_name = "checkout/checkout.html"
    credit_card_form = CreditCardInfo
    def get(self, request, **kwargs):
        return render(request, self.template_name, {})

    def post(self, request, *args, **kwargs):
        stripe.api_key = "sk_test_bb2N1MRHoMGhvnc4ZCvrMRMk"
        life = request.POST.get('life', '') 
        card = request.POST.get('stripeToken', '')

        stripe.Charge.create(
            amount= 10.00,
            currency="USD",
            card=card,
            desciription="Test charge")

        return HttpResponseRedirect(reverse('home'))

我收到的错误消息是“您为‘card’传递了一个空白字符串。您应该从请求中删除‘card’参数或提供一个非空值。”我假设这只是意味着我没有正确创建信用卡 token ,但我可能是错的。任何帮助都会很棒,谢谢。

最佳答案

card 参数不应该是 stripeToken,它应该是这样的

"card": {
    "id": "card_15EGuS2eZvKYlo2CgNp97XYZ",
    "object": "card",
    "last4": "4242",
    "brand": "Visa",
    "funding": "credit",
    "exp_month": 1,
    "exp_year": 2050,
    "fingerprint": "Xt5EWLLDS7FJjR1c",
    "country": "US",
    "name": null,
    "address_line1": null,
    "address_line2": null,
    "address_city": null,
    "address_state": null,
    "address_zip": null,
    "address_country": null,
    "cvc_check": "pass",
    "address_line1_check": null,
    "address_zip_check": null,
    "dynamic_last4": null,
    "customer": null
  },

您可以在the stripe documentation中查看其余参数。 .

您应该在 View 中传递 card={'id': stripeToken}

关于javascript - 无法使用 Stripe 创建信用卡 token (django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664466/

相关文章:

javascript - 如何访问对象属性数组?

javascript - 过渡导致具有不透明度的元素消失

html - 一个 div 中的多个背景图像

javascript - 如果函数花费的时间超过 X 毫秒,则显示加载微调器

javascript - reactjs - 如何设置边框样式?

python - 在固定训练时间后保存 tensorflow 模型

python - 如何使用 Python 从 7z 存档中读取文件?

Python 传输机械化浏览器 session

jquery superscrollorama 固定 bgimg

javascript - Sketch.js - 画笔从鼠标指针下方开始