我是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"
}
}
感谢您的帮助!
答案 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进行操作。