integrallis/stripe_saas

View on GitHub
app/views/stripe_saas/subscriptions/_card.html.erb

Summary

Maintainability
Test Coverage
<% content_for :stripe_saas do %>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<% end %>

<%= render 'card_form', url: url, title: title %>

<script type="text/javascript">
  Stripe.setPublishableKey("<%= StripeSaas.stripe_publishable_key %>");

  var stripeResponseHandler = function (status, response) {

    if (response.error) {
      // show the errors on the form
      $(".payment-errors").text(response.error.message).show();
      $(".submit-button").removeAttr("disabled");
    } else {
      var $form = $("#payment-form");
      // token contains id, last4, and card type
      // insert the token into the form so it gets submitted to the server
      $cc_token_field = $('<input type="hidden" name="subscription[credit_card_token]" />').val(response.id);
      $last_four_field = $('<input type="hidden" name="subscription[last_four]" />').val(response.card.last4);
      $card_brand = $('<input type="hidden" name="subscription[card_type]" />').val(response.card.brand);
      //
      $form.append($cc_token_field, $last_four_field, $card_brand);

      $form.get(0).submit();
    }
  }

  $(document).ready(function() {
    // By default, don't show errors.
    $(".payment-errors").hide()

    $("#payment-form").submit(function(event) {

      // disable the submit button to prevent repeated clicks
      $('.submit-button').attr("disabled", "disabled");

      Stripe.createToken({
        number: $('.card-number').val(),
        cvc: $('.card-cvc').val(),
        exp_month: $('.card-expiry-month').val(),
        exp_year: $('.card-expiry-year').val()
      }, stripeResponseHandler);

      // prevent the form from submitting with the default action
      event.preventDefault();
    });
  });

</script>