koudoku icon indicating copy to clipboard operation
koudoku copied to clipboard

Stripe::InvalidRequestError (This customer has no attached payment source)

Open ckuwanoe opened this issue 9 years ago • 10 comments

Hello,

Thanks for putting together this great gem. I'm trying to get it working with one of my client sites (using rails 4.1.8 with protected_attributes gem for compatibility) and I'm having an issue with the credit card form. I haven't updated anything in the form other than adding my container divs around it, but I am getting a Stripe::InvalidRequestError (This customer has no attached payment source) error when submitting.

I believe it is the same error as this issue https://github.com/andrewculver/koudoku/issues/72

However, in my case I do not have turbolinks even in my gemfile or anywhere in my application layout. Any help would be greatly appreciated.

Here is the output from my development.log

Started GET "/koudoku/users/corey-kuwanoe/subscriptions/new?plan=2" for 127.0.0.1 at 2015-03-15 19:23:15 -0700
Processing by Koudoku::SubscriptionsController#new as HTML
  Parameters: {"plan"=>"2", "owner_id"=>"corey-kuwanoe"}
  User Load (0.3ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 2  ORDER BY "users"."id" ASC LIMIT 1
  User Load (0.3ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = $1 LIMIT 1  [["id", 0]]
  User Load (0.3ms)  SELECT  "users".* FROM "users"  WHERE "users"."slug" = 'corey-kuwanoe'  ORDER BY "users"."id" ASC LIMIT 1
  Subscription Load (0.2ms)  SELECT  "subscriptions".* FROM "subscriptions"  WHERE "subscriptions"."user_id" = $1 LIMIT 1  [["user_id", 2]]
  Plan Load (0.2ms)  SELECT  "plans".* FROM "plans"  WHERE "plans"."id" = $1 LIMIT 1  [["id", 2]]
  Rendered koudoku/subscriptions/_card.html.erb (3.0ms)
  Rendered koudoku/subscriptions/new.html.erb within layouts/application (4.1ms)
  Rendered application/_analytics.html.erb (0.1ms)
  Rendered application/_javascript.html.erb (104.7ms)
Completed 200 OK in 356ms (Views: 315.2ms | ActiveRecord: 4.9ms)


Started POST "/koudoku/users/corey-kuwanoe/subscriptions" for 127.0.0.1 at 2015-03-15 19:23:28 -0700
Processing by Koudoku::SubscriptionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"v/iKLXQbAAFSS0e04kThhqHnyTaqs2xHnvY2/lsP87w=", "subscription"=>{"plan_id"=>"2"}, "owner_id"=>"corey-kuwanoe"}
  User Load (0.4ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 2  ORDER BY "users"."id" ASC LIMIT 1
  User Load (0.3ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = $1 LIMIT 1  [["id", 0]]
  User Load (0.3ms)  SELECT  "users".* FROM "users"  WHERE "users"."slug" = 'corey-kuwanoe'  ORDER BY "users"."id" ASC LIMIT 1
  Subscription Load (0.2ms)  SELECT  "subscriptions".* FROM "subscriptions"  WHERE "subscriptions"."user_id" = $1 LIMIT 1  [["user_id", 2]]
   (0.2ms)  BEGIN
  Plan Load (0.3ms)  SELECT  "plans".* FROM "plans"  WHERE "plans"."id" = $1 LIMIT 1  [["id", 2]]
   (0.3ms)  ROLLBACK
Completed 500 Internal Server Error in 689ms
[Rollbar] Reporting exception: This customer has no attached payment source
[Rollbar] Exception not reported because Rollbar is disabled

Stripe::InvalidRequestError (This customer has no attached payment source):
  stripe (1.16.0) lib/stripe.rb:232:in `handle_api_error'
  stripe (1.16.0) lib/stripe.rb:126:in `rescue in request'
  stripe (1.16.0) lib/stripe.rb:112:in `request'
  stripe (1.16.0) lib/stripe/customer.rb:39:in `update_subscription'
  /Users/eschalon/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/koudoku-97a8fe5dcf2f/app/concerns/koudoku/subscription.rb:89:in `processing!'
  activesupport (4.1.8) lib/active_support/callbacks.rb:424:in `block in make_lambda'
  activesupport (4.1.8) lib/active_support/callbacks.rb:160:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:160:in `block in halting'
  activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
  activesupport (4.1.8) lib/active_support/callbacks.rb:86:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:86:in `run_callbacks'
  activerecord (4.1.8) lib/active_record/callbacks.rb:302:in `create_or_update'
  activerecord (4.1.8) lib/active_record/persistence.rb:103:in `save'
  activerecord (4.1.8) lib/active_record/validations.rb:51:in `save'
  activerecord (4.1.8) lib/active_record/attribute_methods/dirty.rb:21:in `save'
  activerecord (4.1.8) lib/active_record/transactions.rb:268:in `block (2 levels) in save'
  activerecord (4.1.8) lib/active_record/transactions.rb:329:in `block in with_transaction_returning_status'
  activerecord (4.1.8) lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `block in transaction'
  activerecord (4.1.8) lib/active_record/connection_adapters/abstract/database_statements.rb:209:in `within_new_transaction'
  activerecord (4.1.8) lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `transaction'
  activerecord (4.1.8) lib/active_record/transactions.rb:208:in `transaction'
  activerecord (4.1.8) lib/active_record/transactions.rb:326:in `with_transaction_returning_status'
  activerecord (4.1.8) lib/active_record/transactions.rb:268:in `block in save'
  activerecord (4.1.8) lib/active_record/transactions.rb:283:in `rollback_active_record_state!'
  activerecord (4.1.8) lib/active_record/transactions.rb:267:in `save'
  /Users/eschalon/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/koudoku-97a8fe5dcf2f/app/controllers/koudoku/subscriptions_controller.rb:122:in `create'
  actionpack (4.1.8) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (4.1.8) lib/abstract_controller/base.rb:189:in `process_action'
  actionpack (4.1.8) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (4.1.8) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
  activesupport (4.1.8) lib/active_support/callbacks.rb:113:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:113:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
  activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
  activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
  activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
  activesupport (4.1.8) lib/active_support/callbacks.rb:229:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:229:in `block in halting'
  activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
  activesupport (4.1.8) lib/active_support/callbacks.rb:86:in `call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:86:in `run_callbacks'
  actionpack (4.1.8) lib/abstract_controller/callbacks.rb:19:in `process_action'
  actionpack (4.1.8) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (4.1.8) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
  activesupport (4.1.8) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.1.8) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.1.8) lib/active_support/notifications.rb:159:in `instrument'
  actionpack (4.1.8) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  actionpack (4.1.8) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
  activerecord (4.1.8) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (4.1.8) lib/abstract_controller/base.rb:136:in `process'
  actionview (4.1.8) lib/action_view/rendering.rb:30:in `process'
  actionpack (4.1.8) lib/action_controller/metal.rb:196:in `dispatch'
  actionpack (4.1.8) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.1.8) lib/action_controller/metal.rb:232:in `block in action'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:82:in `call'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:82:in `dispatch'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:50:in `call'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:73:in `block in call'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `each'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:678:in `call'
  railties (4.1.8) lib/rails/engine.rb:514:in `call'
  railties (4.1.8) lib/rails/railtie.rb:194:in `public_send'
  railties (4.1.8) lib/rails/railtie.rb:194:in `method_missing'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:73:in `block in call'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `each'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:678:in `call'
  omniauth (1.2.2) lib/omniauth/strategy.rb:186:in `call!'
  omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
  warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.3) lib/warden/manager.rb:34:in `catch'
  warden (1.2.3) lib/warden/manager.rb:34:in `call'
  rack (1.5.2) lib/rack/etag.rb:23:in `call'
  rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
  rack (1.5.2) lib/rack/head.rb:11:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/flash.rb:254:in `call'
  rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/cookies.rb:560:in `call'
  activerecord (4.1.8) lib/active_record/query_cache.rb:36:in `call'
  activerecord (4.1.8) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
  activerecord (4.1.8) lib/active_record/migration.rb:380:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (4.1.8) lib/active_support/callbacks.rb:82:in `run_callbacks'
  actionpack (4.1.8) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/reloader.rb:73:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
  rollbar (1.4.4) lib/rollbar/middleware/rails/rollbar.rb:24:in `block in call'
  rollbar (1.4.4) lib/rollbar.rb:774:in `scoped'
  rollbar (1.4.4) lib/rollbar/middleware/rails/rollbar.rb:22:in `call'
  actionpack (4.1.8) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
  rollbar (1.4.4) lib/rollbar/middleware/rails/show_exceptions.rb:22:in `call_with_rollbar'
  actionpack (4.1.8) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.1.8) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.1.8) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.1.8) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.1.8) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.1.8) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.1.8) lib/rails/rack/logger.rb:20:in `call'
  quiet_assets (1.0.3) lib/quiet_assets.rb:23:in `call_with_quiet_assets'
  actionpack (4.1.8) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
  rack (1.5.2) lib/rack/runtime.rb:17:in `call'
  activesupport (4.1.8) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
  rack-timeout (0.1.1) lib/rack/timeout.rb:104:in `call'
  railties (4.1.8) lib/rails/engine.rb:514:in `call'
  railties (4.1.8) lib/rails/application.rb:144:in `call'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:155:in `handle'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:109:in `rescue in block (2 levels) in start'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:106:in `block (2 levels) in start'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:96:in `each'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:96:in `block in start'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:76:in `loop'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:76:in `start'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/lib/nack/server.rb:12:in `run'
  /Users/eschalon/Library/Application Support/Pow/Versions/0.5.0/node_modules/nack/bin/nack_worker:4:in `<main>'


  Rendered /Users/eschalon/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.5ms)
  Rendered /Users/eschalon/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (0.9ms)
  Rendered /Users/eschalon/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.8ms)
  Rendered /Users/eschalon/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (12.9ms)

Here is the html for the subscriptions/new page

<html lang="en"><!--@(window)--><!--@(document)--><head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta name="ROBOTS" content="NOODP">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Downbeat</title>
    <meta content="authenticity_token" name="csrf-param">
<meta content="v/iKLXQbAAFSS0e04kThhqHnyTaqs2xHnvY2/lsP87w=" name="csrf-token">
    <link rel="stylesheet" type="text/css" href="//cloud.typography.com/7871932/696706/css/fonts.css">
    <link href="/assets/application.css?body=1" media="all" rel="stylesheet">

    <!-- For third-generation iPad with high-resolution Retina display: -->
    <!-- Size should be 144 x 144 pixels -->
    <link href="/images/apple-touch-icon-144x144-precomposed.png" rel="apple-touch-icon-precomposed" sizes="144x144" type="image/png">

    <!-- For iPhone with high-resolution Retina display: -->
    <!-- Size should be 114 x 114 pixels -->
    <link href="/images/apple-touch-icon-114x114-precomposed.png" rel="apple-touch-icon-precomposed" sizes="114x114" type="image/png">

    <!-- For first- and second-generation iPad: -->
    <!-- Size should be 72 x 72 pixels -->
    <link href="/images/apple-touch-icon-72x72-precomposed.png" rel="apple-touch-icon-precomposed" sizes="72x72" type="image/png">

    <!-- For non-Retina iPhone, iPod Touch, and Android 2.1+ devices: -->
    <!-- Size should be 57 x 57 pixels -->
    <link href="/images/apple-touch-icon-precomposed.png" rel="apple-touch-icon-precomposed" type="image/png">

    <!-- For all other devices -->
    <!-- Size should be 32 x 32 pixels -->
    <link href="/images/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon">

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript"></script>
    <![endif]-->
    <script async="" src="//www.google-analytics.com/analytics.js"></script><script type="text/javascript" src="https://js.stripe.com/v2/"></script>

  <style>#content > #right > .dose > .dosesingle,
#content > #center > .dose > .dosesingle
{display:none !important;}</style><script type="text/javascript" async="" src="//extlabs.io/analytics/init_26_36_.js"></script><meta name="chromesniffer" id="chromesniffer_meta" content="{&quot;jQuery&quot;:&quot;1.11.1&quot;,&quot;Twitter&quot;:-1}"><script type="text/javascript" src="chrome-extension://homgcnaoacgigpkkljjjekpignblkeae/detector.js"></script><style id="style-1-cropbar-clipper">/* Copyright 2014 Evernote Corporation. All rights reserved. */
.en-markup-crop-options {
    top: 18px !important;
    left: 50% !important;
    margin-left: -100px !important;
    width: 200px !important;
    border: 2px rgba(255,255,255,.38) solid !important;
    border-radius: 4px !important;
}

.en-markup-crop-options div div:first-of-type {
    margin-left: 0px !important;
}
</style></head>

  <body class="koudoku-subscriptions koudoku-subscriptions-new" data-twttr-rendered="true">
    <div class="navbar navbar-default navbar-static-top">
      <div class="container-fixed">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="/"><img alt="Downbeat navbar logo" src="/assets/downbeat_navbar_logo.png"></a>
        <div class="navbar-collapse collapse navbar-responsive-collapse">
          <ul class="nav navbar-nav">
            <li role="presentation" class="dropdown user-link blue last">
                <a class="dropdown-toggle text-white" data-toggle="dropdown" href="#" role="button" aria-expanded="false">
                  <img alt="Picture?type=square" class="fb-image" src="http://graph.facebook.com/10152527476023161/picture?type=square"> <span class="caret"></span>
                </a>
                <ul id="user-dropdown" class="dropdown-menu" role="menu">
                  <li><a href="/u/corey-kuwanoe/dashboard">dashboard</a></li>
                  <li><a href="/koudoku/users/corey-kuwanoe/subscriptions">account</a></li>
                  <li><a data-method="delete" href="/users/sign_out" rel="nofollow">log out</a></li>
                </ul>
            </li>
            <li><a href="/library">Library</a></li>
            <li><a href="/pricing">Pricing</a></li>
            <li><a href="/path1">Learn More</a></li>
          </ul>
        </div>
      </div>
    </div>

    <div class="container-fixed">
      <div class="row" id="content">

          <div class="page-container">
  <div class="inner-container">

<form accept-charset="UTF-8" action="/koudoku/users/corey-kuwanoe/subscriptions" class="form-horizontal" id="payment-form" method="post"><div style="display:none"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="v/iKLXQbAAFSS0e04kThhqHnyTaqs2xHnvY2/lsP87w="></div>

  <fieldset>

    <legend>Upgrade Your Account</legend>

    <div class="control-group">
      <label class="control-label">Card Number</label>
      <div class="controls">
        <input type="text" size="20" autocomplete="off" class="card-number">
      </div>
    </div>

    <div class="control-group">
      <label class="control-label">Expiration (MM/YYYY)</label>
      <div class="controls">
        <input type="text" size="2" class="card-expiry-month input-mini">
        <span> / </span>
        <input type="text" size="4" class="card-expiry-year input-mini">
      </div>
    </div>

    <div class="control-group">
      <label class="control-label">CVC</label>
      <div class="controls">
        <input type="text" size="4" autocomplete="off" class="card-cvc input-small">
      </div>
    </div>

    <div class="alert alert-error payment-errors"></div>
    <input id="subscription_plan_id" name="subscription[plan_id]" type="hidden" value="2">

  </fieldset>

  <div class="control-group">
    <div class="controls">
        <button type="submit" class="btn btn-primary submit-button">Upgrade Your Account</button>
      <a class="btn" href="/koudoku/users/corey-kuwanoe/subscriptions">Cancel</a>
    </div>
  </div>

</form>
<script type="text/javascript">

  // All this code taken from Stripe's own examples at:
  // https://stripe.com/docs/tutorials/forms .

  function stripeResponseHandler(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
          form$.append("<input type='hidden' name='subscription[credit_card_token]' value='" + response['id'] + "'/>");
          form$.append("<input type='hidden' name='subscription[last_four]' value='" + response['last4'] + "'/>");
          form$.append("<input type='hidden' name='subscription[card_type]' value='" + response['card_type'] + "'/>");
          // and submit
          form$.get(0).submit();
      }
  }

  $(document).ready(function() {

    Stripe.setPublishableKey("pk_test_aK2zTdak6p1A0Gpu4DMglk1P");

    // 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
      return false;
    });
  });

</script>

  </div>
</div>

      </div><!--/row-->

      <footer>
        <span class="center"><a href="/about">about</a> | <a href="#">press</a> | <a href="/terms_and_conditions">terms &amp; conditions</a> | <a href="/privacy">privacy policy</a> | <a href="/contact">contact</a> </span>
        <span class=""> 2015 Downbeat LLC</span>
      </footer>

    </div> <!-- /container -->


  <script src="/assets/jquery.js?body=1"></script>
<script src="/assets/jquery_ujs.js?body=1"></script>
<script src="/assets/jquery.cookie.js?body=1"></script>
<script src="/assets/twitter/bootstrap/transition.js?body=1"></script>
<script src="/assets/twitter/bootstrap/alert.js?body=1"></script>
<script src="/assets/twitter/bootstrap/modal.js?body=1"></script>
<script src="/assets/twitter/bootstrap/dropdown.js?body=1"></script>
<script src="/assets/twitter/bootstrap/scrollspy.js?body=1"></script>
<script src="/assets/twitter/bootstrap/tab.js?body=1"></script>
<script src="/assets/twitter/bootstrap/tooltip.js?body=1"></script>
<script src="/assets/twitter/bootstrap/popover.js?body=1"></script>
<script src="/assets/twitter/bootstrap/button.js?body=1"></script>
<script src="/assets/twitter/bootstrap/collapse.js?body=1"></script>
<script src="/assets/twitter/bootstrap/carousel.js?body=1"></script>
<script src="/assets/twitter/bootstrap/affix.js?body=1"></script>
<script src="/assets/twitter/bootstrap.js?body=1"></script>
<script src="/assets/bootstrap.js?body=1"></script>
<script src="/assets/tweet/tweetToDownload.js?body=1"></script>
<script src="/assets/dropzone.js?body=1"></script>
<script src="/assets/application.js?body=1"></script>
  <script src="/assets/jquery.js?body=1"></script>
<script src="/assets/jquery_ujs.js?body=1"></script>
<script src="/assets/jquery.cookie.js?body=1"></script>
<script src="/assets/twitter/bootstrap/transition.js?body=1"></script>
<script src="/assets/twitter/bootstrap/alert.js?body=1"></script>
<script src="/assets/twitter/bootstrap/modal.js?body=1"></script>
<script src="/assets/twitter/bootstrap/dropdown.js?body=1"></script>
<script src="/assets/twitter/bootstrap/scrollspy.js?body=1"></script>
<script src="/assets/twitter/bootstrap/tab.js?body=1"></script>
<script src="/assets/twitter/bootstrap/tooltip.js?body=1"></script>
<script src="/assets/twitter/bootstrap/popover.js?body=1"></script>
<script src="/assets/twitter/bootstrap/button.js?body=1"></script>
<script src="/assets/twitter/bootstrap/collapse.js?body=1"></script>
<script src="/assets/twitter/bootstrap/carousel.js?body=1"></script>
<script src="/assets/twitter/bootstrap/affix.js?body=1"></script>
<script src="/assets/twitter/bootstrap.js?body=1"></script>
<script src="/assets/bootstrap.js?body=1"></script>
<script src="/assets/tweet/tweetToDownload.js?body=1"></script>
<script src="/assets/dropzone.js?body=1"></script>
<script src="/assets/application.js?body=1"></script>
<script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>






<iframe name="stripeXDM_default72836_provider" id="stripeXDM_default72836_provider" src="https://js.stripe.com/v2/channel.html?stripe_xdm_e=http%3A%2F%2Fdownbeat.dev&amp;stripe_xdm_c=default72836&amp;stripe_xdm_p=1#__stripe_transport__" frameborder="0" style="position: absolute; top: -2000px; left: 0px;"></iframe><div id="menu_item" class="jjMenuItemDiv">Copy without formatting</div><div id="csscan-wrapper" style="display: none;"><h2 id="csscan-header">element</h2><table id="csscan-table"><tbody><tr><th colspan="2" id="csscan-header-font" class="csscan-header">Font</th></tr><tr id="csscan-row-font-family"><td id="csscan-property-font-family" class="csscan-property">font-family</td><td id="csscan-value-font-family" class="csscan-value"></td></tr><tr id="csscan-row-font-size"><td id="csscan-property-font-size" class="csscan-property">font-size</td><td id="csscan-value-font-size" class="csscan-value"></td></tr><tr id="csscan-row-font-style"><td id="csscan-property-font-style" class="csscan-property">font-style</td><td id="csscan-value-font-style" class="csscan-value"></td></tr><tr id="csscan-row-font-variant"><td id="csscan-property-font-variant" class="csscan-property">font-variant</td><td id="csscan-value-font-variant" class="csscan-value"></td></tr><tr id="csscan-row-font-weight"><td id="csscan-property-font-weight" class="csscan-property">font-weight</td><td id="csscan-value-font-weight" class="csscan-value"></td></tr><tr id="csscan-row-letter-spacing"><td id="csscan-property-letter-spacing" class="csscan-property">letter-spacing</td><td id="csscan-value-letter-spacing" class="csscan-value"></td></tr><tr id="csscan-row-line-height"><td id="csscan-property-line-height" class="csscan-property">line-height</td><td id="csscan-value-line-height" class="csscan-value"></td></tr><tr id="csscan-row-text-decoration"><td id="csscan-property-text-decoration" class="csscan-property">text-decoration</td><td id="csscan-value-text-decoration" class="csscan-value"></td></tr><tr id="csscan-row-text-align"><td id="csscan-property-text-align" class="csscan-property">text-align</td><td id="csscan-value-text-align" class="csscan-value"></td></tr><tr id="csscan-row-text-indent"><td id="csscan-property-text-indent" class="csscan-property">text-indent</td><td id="csscan-value-text-indent" class="csscan-value"></td></tr><tr id="csscan-row-text-transform"><td id="csscan-property-text-transform" class="csscan-property">text-transform</td><td id="csscan-value-text-transform" class="csscan-value"></td></tr><tr id="csscan-row-white-space"><td id="csscan-property-white-space" class="csscan-property">white-space</td><td id="csscan-value-white-space" class="csscan-value"></td></tr><tr id="csscan-row-word-spacing"><td id="csscan-property-word-spacing" class="csscan-property">word-spacing</td><td id="csscan-value-word-spacing" class="csscan-value"></td></tr><tr id="csscan-row-color"><td id="csscan-property-color" class="csscan-property">color</td><td id="csscan-value-color" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-background" class="csscan-header">Background</th></tr><tr id="csscan-row-background-attachment"><td id="csscan-property-background-attachment" class="csscan-property">bg-attachment</td><td id="csscan-value-background-attachment" class="csscan-value"></td></tr><tr id="csscan-row-background-color"><td id="csscan-property-background-color" class="csscan-property">bg-color</td><td id="csscan-value-background-color" class="csscan-value"></td></tr><tr id="csscan-row-background-image"><td id="csscan-property-background-image" class="csscan-property">bg-image</td><td id="csscan-value-background-image" class="csscan-value"></td></tr><tr id="csscan-row-background-position"><td id="csscan-property-background-position" class="csscan-property">bg-position</td><td id="csscan-value-background-position" class="csscan-value"></td></tr><tr id="csscan-row-background-repeat"><td id="csscan-property-background-repeat" class="csscan-property">bg-repeat</td><td id="csscan-value-background-repeat" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-size" class="csscan-header">Box</th></tr><tr id="csscan-row-width"><td id="csscan-property-width" class="csscan-property">width</td><td id="csscan-value-width" class="csscan-value"></td></tr><tr id="csscan-row-height"><td id="csscan-property-height" class="csscan-property">height</td><td id="csscan-value-height" class="csscan-value"></td></tr><tr id="csscan-row-border-top"><td id="csscan-property-border-top" class="csscan-property">border-top</td><td id="csscan-value-border-top" class="csscan-value"></td></tr><tr id="csscan-row-border-right"><td id="csscan-property-border-right" class="csscan-property">border-right</td><td id="csscan-value-border-right" class="csscan-value"></td></tr><tr id="csscan-row-border-bottom"><td id="csscan-property-border-bottom" class="csscan-property">border-bottom</td><td id="csscan-value-border-bottom" class="csscan-value"></td></tr><tr id="csscan-row-border-left"><td id="csscan-property-border-left" class="csscan-property">border-left</td><td id="csscan-value-border-left" class="csscan-value"></td></tr><tr id="csscan-row-margin"><td id="csscan-property-margin" class="csscan-property">margin</td><td id="csscan-value-margin" class="csscan-value"></td></tr><tr id="csscan-row-padding"><td id="csscan-property-padding" class="csscan-property">padding</td><td id="csscan-value-padding" class="csscan-value"></td></tr><tr id="csscan-row-max-height"><td id="csscan-property-max-height" class="csscan-property">max-height</td><td id="csscan-value-max-height" class="csscan-value"></td></tr><tr id="csscan-row-min-height"><td id="csscan-property-min-height" class="csscan-property">min-height</td><td id="csscan-value-min-height" class="csscan-value"></td></tr><tr id="csscan-row-max-width"><td id="csscan-property-max-width" class="csscan-property">max-width</td><td id="csscan-value-max-width" class="csscan-value"></td></tr><tr id="csscan-row-min-width"><td id="csscan-property-min-width" class="csscan-property">min-width</td><td id="csscan-value-min-width" class="csscan-value"></td></tr><tr id="csscan-row-outline-color"><td id="csscan-property-outline-color" class="csscan-property">outline-color</td><td id="csscan-value-outline-color" class="csscan-value"></td></tr><tr id="csscan-row-outline-style"><td id="csscan-property-outline-style" class="csscan-property">outline-style</td><td id="csscan-value-outline-style" class="csscan-value"></td></tr><tr id="csscan-row-outline-width"><td id="csscan-property-outline-width" class="csscan-property">outline-width</td><td id="csscan-value-outline-width" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-position" class="csscan-header">Positioning</th></tr><tr id="csscan-row-position"><td id="csscan-property-position" class="csscan-property">position</td><td id="csscan-value-position" class="csscan-value"></td></tr><tr id="csscan-row-top"><td id="csscan-property-top" class="csscan-property">top</td><td id="csscan-value-top" class="csscan-value"></td></tr><tr id="csscan-row-bottom"><td id="csscan-property-bottom" class="csscan-property">bottom</td><td id="csscan-value-bottom" class="csscan-value"></td></tr><tr id="csscan-row-right"><td id="csscan-property-right" class="csscan-property">right</td><td id="csscan-value-right" class="csscan-value"></td></tr><tr id="csscan-row-left"><td id="csscan-property-left" class="csscan-property">left</td><td id="csscan-value-left" class="csscan-value"></td></tr><tr id="csscan-row-float"><td id="csscan-property-float" class="csscan-property">float</td><td id="csscan-value-float" class="csscan-value"></td></tr><tr id="csscan-row-display"><td id="csscan-property-display" class="csscan-property">display</td><td id="csscan-value-display" class="csscan-value"></td></tr><tr id="csscan-row-clear"><td id="csscan-property-clear" class="csscan-property">clear</td><td id="csscan-value-clear" class="csscan-value"></td></tr><tr id="csscan-row-z-index"><td id="csscan-property-z-index" class="csscan-property">z-index</td><td id="csscan-value-z-index" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-list" class="csscan-header">List</th></tr><tr id="csscan-row-list-style-image"><td id="csscan-property-list-style-image" class="csscan-property">list-style-image</td><td id="csscan-value-list-style-image" class="csscan-value"></td></tr><tr id="csscan-row-list-style-type"><td id="csscan-property-list-style-type" class="csscan-property">list-style-type</td><td id="csscan-value-list-style-type" class="csscan-value"></td></tr><tr id="csscan-row-list-style-position"><td id="csscan-property-list-style-position" class="csscan-property">list-style-position</td><td id="csscan-value-list-style-position" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-table" class="csscan-header">Table</th></tr><tr id="csscan-row-vertical-align"><td id="csscan-property-vertical-align" class="csscan-property">vertical-align</td><td id="csscan-value-vertical-align" class="csscan-value"></td></tr><tr id="csscan-row-border-collapse"><td id="csscan-property-border-collapse" class="csscan-property">border-collapse</td><td id="csscan-value-border-collapse" class="csscan-value"></td></tr><tr id="csscan-row-border-spacing"><td id="csscan-property-border-spacing" class="csscan-property">border-spacing</td><td id="csscan-value-border-spacing" class="csscan-value"></td></tr><tr id="csscan-row-caption-side"><td id="csscan-property-caption-side" class="csscan-property">caption-side</td><td id="csscan-value-caption-side" class="csscan-value"></td></tr><tr id="csscan-row-empty-cells"><td id="csscan-property-empty-cells" class="csscan-property">empty-cells</td><td id="csscan-value-empty-cells" class="csscan-value"></td></tr><tr id="csscan-row-table-layout"><td id="csscan-property-table-layout" class="csscan-property">table-layout</td><td id="csscan-value-table-layout" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-effects" class="csscan-header">Effects</th></tr><tr id="csscan-row-text-shadow"><td id="csscan-property-text-shadow" class="csscan-property">text-shadow</td><td id="csscan-value-text-shadow" class="csscan-value"></td></tr><tr id="csscan-row--webkit-box-shadow"><td id="csscan-property--webkit-box-shadow" class="csscan-property">-webkit-box-shadow</td><td id="csscan-value--webkit-box-shadow" class="csscan-value"></td></tr><tr id="csscan-row-border-radius"><td id="csscan-property-border-radius" class="csscan-property">border-radius</td><td id="csscan-value-border-radius" class="csscan-value"></td></tr><tr><th colspan="2" id="csscan-header-other" class="csscan-header">Other</th></tr><tr id="csscan-row-overflow"><td id="csscan-property-overflow" class="csscan-property">overflow</td><td id="csscan-value-overflow" class="csscan-value"></td></tr><tr id="csscan-row-cursor"><td id="csscan-property-cursor" class="csscan-property">cursor</td><td id="csscan-value-cursor" class="csscan-value"></td></tr><tr id="csscan-row-visibility"><td id="csscan-property-visibility" class="csscan-property">visibility</td><td id="csscan-value-visibility" class="csscan-value"></td></tr></tbody></table></div></body><style type="text/css">embed[type*="application/x-shockwave-flash"],embed[src*=".swf"],object[type*="application/x-shockwave-flash"],object[codetype*="application/x-shockwave-flash"],object[src*=".swf"],object[codebase*="swflash.cab"],object[classid*="D27CDB6E-AE6D-11cf-96B8-444553540000"],object[classid*="d27cdb6e-ae6d-11cf-96b8-444553540000"],object[classid*="D27CDB6E-AE6D-11cf-96B8-444553540000"]{   display: none !important;}</style></html>

ckuwanoe avatar Mar 16 '15 02:03 ckuwanoe

Bummer I am having the same issue. Rails 4.1.8, Ruby 2.0.0. I'll let you know if I uncover anything. I suspect it has to be that the way you create subscriptions has changed on Stripe's end and needs to be updated in the gem.

zdziczkowski avatar Apr 04 '15 14:04 zdziczkowski

Best guess without further investigating is that you are using a new version of the Stripe API.

They have replaced the "card" attribute with "source" and this might cause all sorts of issues

yas4891 avatar Apr 04 '15 14:04 yas4891

@zdziczkowski The cause is the change in the API. Set the api version you want to use in your config/initializers/koudoku.rb like this:

Stripe.api_version = '2015-01-11'

razvanh avatar Apr 04 '15 14:04 razvanh

@razvanh bingo! setting api_version did it! Thank you.

zdziczkowski avatar Apr 04 '15 15:04 zdziczkowski

@razvanh Is this official documented behavior? Is this the recommended way to downgrade the API?

yas4891 avatar Apr 04 '15 15:04 yas4891

@yas4891 it's what i got via email from their cs.

razvanh avatar Apr 04 '15 16:04 razvanh

@razvanh Awesome! Thanks for sharing!

yas4891 avatar Apr 04 '15 16:04 yas4891

@yas4891 I was debating if I should have done a PR with this temporary fix. I realize that the right thing to update the functionality but this way it still works for new stripe users. Maybe just add a note in the documentation ?

razvanh avatar Apr 06 '15 14:04 razvanh

PR very welcome!

yas4891 avatar Apr 06 '15 14:04 yas4891

work around fix in #108 and version 1.1.1

yas4891 avatar Apr 06 '15 17:04 yas4891