У меня есть форма оплаты, в которой есть следующий 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 контрольный номер копии 4000000000000341
, он выдает правильную ошибку Payment Declined
сообщение в новой форме подписки.А на информационной панели Stripe отображается сбой платежа, связанного с этой картой.
Однако, если я затем введу номер тестовой карты, который должен успешно списать средства (4000000000000077
) и отправить, я получу ту же ошибку, что идо.Тестовые сборы на приборной панели показывают, что она все еще пытается использовать ту же карту.
Только после обновления страницы форма будет отправлять правильную карточку.
Я не понимаю, почему моя страница отправляет номер карточки из первой отправки при вводе новой карточки.