我有一个付款表格,其中包含以下JS来生成条纹令牌。
var form = $( "#new_subscription" );
form.validate();
jQuery(function($) {
$('#new_subscription').submit(function(event) {
var $form = $(this);
$form.find('#formSubmit').prop('disabled', true);
Stripe.card.createToken($form, stripeResponseHandler);
return false;
});
});
function stripeResponseHandler(status, response) {
var $form = $('#new_subscription');
if (response.error) {
// Show the errors on the form
$form.find('.payment-errors').text(response.error.message);
$form.find('.payment-errors').removeClass('hidden');
$form.find('#formSubmit').prop('disabled', false);
} else {
$form.find('.payment-errors').addClass('hidden');
// 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="hidden" name="stripe_token" />').val(token));
// Remove Stripe cc fields
$("[data-stripe=number]").remove();
$("[data-stripe=cvc]").remove();
$("[data-stripe=exp-year]").remove();
$("[data-stripe=exp-month]").remove();
// and submit
$form.get(0).submit();
}
};
在我的控制器中,我有:
if !@subscription.errors.blank?
@user = User.new(user_params)
@subscription_item = SubscriptionItem.new(subscription_item_params)
flash.now[:error] = @subscription.errors[:base][0]
render :new
当我使用Stripe test cc number 4000000000000341
时,它将在新的订阅表单上呈现正确的Payment Declined
错误消息。并且在Stripe仪表板中,它显示与此卡相关的付款失败。
但是,如果我随后输入应该成功充电(4000000000000077
)并提交的测试卡号,则会收到与以前相同的错误。仪表板上的测试费用表明它仍在尝试使用同一张卡。
只有在页面刷新后,表格才会发送正确的卡片。
我不明白为什么我的页面在输入新卡时会从第一次提交时发送卡号。