条纹表单不会创建任何信用卡

时间:2017-10-27 18:39:23

标签: javascript stripe-payments html-form

我是Stripe的初学者,我正在努力学习文档,我已经尝试了几个教程,但没有一个可以使我的表单工作。

问题是该表单确实创建了一个令牌和一个客户(我可以在我的Stripe Dashboard中看到它),但它没有为该客户创建信用卡,当我尝试订阅该客户的计划时,我得到一个错误。

这是我的表格代码:

<body>

    <div id="listblock">

        <div class="lines" id="logo">
            <h2>Pay from here! </h2>
        </div>

        <form action="payment.php" method="post" id="payment-form">
            <input class="card-number" type="text" required placeholder="1234 5678 8765 4321">
            <input class="card-expiry-month" type="number" required placeholder="MM">
            <input class="card-expiry-year" type="number" required placeholder="YY">
            <input class="card-cvc" type="number" required placeholder="CVC">
            <input type="radio" name="plan" value="1" checked>Basic annual subscription (99€/year)
            <input type="radio" name="plan" value="2" checked>Basic monthly subscription (9,99€/month)

            <button class="button" type="submit">Submit Payment</button>
        </form>

    </div>

</body>

<script src="https://js.stripe.com/v2/"></script>
<script src="https://js.stripe.com/v3/"></script>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script>
    Stripe.setPublishableKey('my key is here');

    var $form = $('#payment-form'); // On récupère le formulaire

    $form.submit(function (e) {

        e.preventDefault();
        $form.find('button').prop('disabled', true); // On désactive le bouton submit

        Stripe.card.createToken({

            number:     $('.card-number').val(),
            cvc:        $('.card-cvc').val(),
            exp_month:  $('.card-expiry-month').val(),
            exp_year:   $('.card-expiry-year').val()

        }, function (status, response) {

            if (response.error) { // Ah une erreur !

                // On affiche les erreurs
                $form.find('.payment-errors').text(response.error.message);
                $form.find('button').prop('disabled', false); // On réactive le bouton

            } else { // Le token a bien été créé

                var token = response.id; // On récupère le token
                // On crée un champs cachée qui contiendra notre token
                $form.append($('<input type="hidden" name="stripeToken" />').val(token));
                $form.get(0).submit(); // On soumet le formulaire

            }
        });
    });


</script>

Stripe API提供的错误是:

    {
  "error": {
    "type": "invalid_request_error",
    "message": "This customer has no attached payment source"
  }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

由于您似乎只是在开发应用程序,所以您一定要使用Stripe的更新版本,即v3。

现在,如果您希望您的客户订阅经常性付款计划,您应首先创建订阅计划(使用API​​或从信息中心),然后创建客户。要创建客户,您需要编写如下代码:

stripe.customers.create({
  email: "jenny.rosen@example.com",
}, function(err, customer) {
  // asynchronously called
});

然后订阅客户到您已经创建的计划。所有这些都在official doc非常好地描述,只需仔细阅读。

此外,如果您不需要实施定期订阅,只想存储客户信息以便以后付款,您可以按照quick start guide,特别是this part进行操作。