Rails 5-提交后,Stripe JS不刷新

时间:2018-09-28 06:56:50

标签: javascript ruby ruby-on-rails-5 stripe-payments

我有一个付款表格,其中包含以下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)并提交的测试卡号,则会收到与以前相同的错误。仪表板上的测试费用表明它仍在尝试使用同一张卡。

只有在页面刷新后,表格才会发送正确的卡片。

我不明白为什么我的页面在输入新卡时会从第一次提交时发送卡号。

0 个答案:

没有答案