2016-08-30 4 views
1

何が起こっていますか?テストキーを使用してもライブキーに変更すると、実際にはうまく動作しましたが、「アクティブなカードがない顧客には請求できません」というエラーが表示されます。Railsのストライプエラー "アクティブなカードがないお客様に請求できません"

マイCharges Controller

class ChargesController < ApplicationController 

before_action :check_if_user_already_subscribed, only: [:new] 

    def new 

    end 


    def create 
    # Amount in cents 
    @amount = 100 



    # Create the charge on Stripe's servers - this will charge the user's card 
    begin 
     # Get the credit card details submitted by the form 
    customer = Stripe::Customer.create(
     :email => params[:email], 
     :source => params[:stripeToken] 
    ) 

     Stripe::Charge.create(
      :amount => @amount, 
      :currency => 'usd', 
      :customer => customer.id, 
      :description => 'Example charge custom form' 
    ) 

     current_user.subscribed = true 
     current_user.stripe_id = customer.id 
     current_user.expiry_date = Date.today + 90.days 
     current_user.save 


     flash[:success] = "Thank you for subscribing. Your account has been unlocked." 
     redirect_to root_path 

     rescue Stripe::CardError => e 
     flash[:danger] = e.message 
     redirect_to root_path 
    end 


end 

    private 

    def check_if_user_already_subscribed 

     if current_user.subscribed 
     flash[:danger] = "You have already subscribed. Please wait until your subscription runs out to resubscribe." 
     redirect_to root_path 
     end 


    end 

end 

マイnew.html.erb

<script type="text/javascript"> 
    Stripe.setPublishableKey("pk_live_Jl8l7PukeQeOkuSn8HqVT96G"); 
</script> 

<%= form_tag charges_path, id: 'payment-form' do %> 


<div class = 'charge-form'> 
    <span class="payment-errors"></span> 

    <div class="form-group"> 
    <label> 
     <input value="<%= current_user.email if current_user %>" type="hidden" data-stripe="email" > 
    </label> 
    </div> 

    <div class="form-group"> 
    <label> 
     <span>Full name</span><span class = 'small-text'> (e.g. John Smith)</span> 
     <input type="text" size="5" data-stripe="name" class = 'form-field'> 
    </label> 
    </div> 

    <div class="form-group"> 
    <label> 
     <span>Country</span><span class = 'small-text'> (e.g. United States)</span> 
     <input type="text" size="10" data-stripe="address_country" class = 'form-field'> 
    </label> 
    </div> 

    <div class="form-group"> 
    <label> 
     <span>Address</span> 
     <input type="text" size="10" data-stripe="address_line1" class = 'form-field'> 
    </label> 
    </div> 

    <div class="form-group"> 
    <label> 
     <span>Postal Code/Zip Code</span> 
     <input type="text" size="4" data-stripe="address_zip" class = 'form-field'> 
    </label> 
    </div> 

    <div class="form-group"> 
    <label> 
     <span>Card Number</span> 
     <input type="text" size="20" data-stripe="number" class = 'form-field'> 
    </label> 
    </div> 

    <div class="form-group"> 
    <label> 
     <span>Expiration (MM/YY)</span> 
     <input type="text" size="2" data-stripe="exp_month" class ='form-field-expiry'> 
     <span>/</span> 
    <input type="text" size="2" data-stripe="exp_year" class ='form-field-expiry'> 
    </label> 

    </div> 

    <div class="form-group"> 
    <label> 
     <span>CVC</span> 
     <input type="text" size="3" data-stripe="cvc" class = 'form-field'> 
    </label> 
    </div> 



    <input type="submit" class="c-btn-submit-charge" value="Submit Payment"> 

    </div> 
<% end %> 

<script> 
    $(function() { 
    var $form = $('#payment-form'); 
    $form.submit(function(event) { 
     // Disable the submit button to prevent repeated clicks: 
     $form.find('.submit').prop('disabled', true); 
     // Request a token from Stripe: 
     Stripe.card.createToken($form, stripeResponseHandler); 
     // Prevent the form from being submitted: 
     return false; 
    }); 
    }); 
    function stripeResponseHandler(status, response) { 
    // Grab the form: 
    var $form = $('#payment-form'); 
    if (response.error) { // Problem! 
     // Show the errors on the form: 
     $form.find('.payment-errors').text(response.error.message); 
     $form.find('.submit').prop('disabled', false); // Re-enable submission 
    } else { // Token was created! 
     // Get the token ID: 
     var token = response.id; 
     // Insert the token ID into the form so it gets submitted to the server: 
     $form.append($('<input type="hidden" name="stripeToken">').val(token)); 
     // Submit the form: 
     $form.get(0).submit(); 
    } 
    }; 
</script> 

まで何誰もが知っていますか?私はこれで2,3時間今働いていますが、私は進歩していません。

答えて

0

stripe.jsが支払いフォームを見つけられなかったため、このエラーが発生しています。 ソリューションは

= form_tag charges_path, id: 'payment-form' do 

のinstedされますが、これを行う必要があります:私はちょうどこれを試してみました

= form_tag charges_path do 
    #payment-form 
+0

、それでも問題が解決しません! – nachime

+0

これに運がいいですか? – Crashtor

関連する問題