0

将客户数据和令牌发送回Stripe的服务器似乎存在问题。我目前正在使用测试API来进行虚拟交易。但是,我无法无故理解这一点。我试过一切来解决这个错误。我将在下面发布代码和错误消息。Stripe :: InvalidRequestError(该客户没有附加付款源)

Subscriptions_Controller.rb

class SubscriptionsController < ApplicationController 
    before_filter :authenticate_user!, except: [:new] 
    before_action :redirect_to_signup, only: [:new] 

    def show 

    end 

    def new 
    @subscription = current_user.subscription 
    if @subscription.active 
     @stripe_customer = Stripe::Customer.retrieve(@subscription.stripe_user_id) 
     @stripe_subscription = @stripe_customer.subscription.first 
    end 
    end 

    def create 
    token = params[:stripeToken] 
    customer = Stripe::Customer.create(
     :source => token, 
     :plan => "gbsubscriptionlevel1", 
     :email => current_user.email 
    ) 

    rescue Stripe::CardError => e 
    flash[:error] = e.message 
    redirect_to new_subscription_path 

    current_user.subscription.stripe_user_id = customer.id 
    current_user.subscription.active = true 
    current_user.subscription.save 

    redirect_to users_index_path 
    end 

    def cancel_subscription 
    @stripe_customer = Stripe::Customer.retrieve(
     current_user.subscription.stripe_user_id 
    ) 
    @stripe_subscription = @stripe_customer.subscription.first 
    end 

    private 
    def redirect_to_signup 
    if !user_signed_in? 
     session["user_return_to"] = new_subscription_path 
     redirect_to new_user_registration_path 
    end 
    end 
end 

_stripe_form.html.erb

<div class="container"> 
    <%= form_tag subscription_path, id: 'payment-form' do %> 

    <form action="/subscription" method="POST" id="payment-form"> 
    <span class="payment-errors"></span> 

    <div class="row"> 
     <div class="col-xs-4"> 
     <label> 
      <span>Card Number</span> 
      <input value="4242 4242 4242 4242" class="form-control" type="text" size="20" data-stripe="number"/> 
     </label> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="col-xs-1"> 
     <label> 
      <span>CVC</span> 
      <input value="123" class="form-control" type="text" size="4" data-stripe="cvc"/> 
     </label> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="col-xs-1"> 
     <label>MM</label> 
     <input value="12" class="form-control" type="text" size="2" data-stripe="exp-month" placeholder="01"/> 
     </div> 
     <div class="col-xs-1"> 
     <label>YYYY</label> 
     <input value="2019" class="form-control" type="text" size="3" data-stripe="exp-year" placeholder="2020"/> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="col-xs-1"> 
     <br/> 
     <button class="btn btn-primary-outline" type="submit">Create Subscription</button> 
     </div> 
    </div> 
    </form> 
    <% end %> 
    <script type="text/javascript" src="https://js.stripe.com/v2/"></script> 
</div> 

subscription.js

Stripe.setPublishableKey('pk_test_tmBNNUvHTmtWXLhSL1q647iH'); 

function stripeResponseHandler(status, response) { 
    var $form = $('#payment-form'); 

    if (response.error) { 
     // Show the errors on the form 
     $form.find('.payment-errors').text(response.error.message); 
     $form.find('button').prop('disabled', false); 
    } else { 
     // 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="stripeToken" />').val(token)); 
     // and submit 
     $form.get(0).submit(); 
    } 
} 

jQuery(function ($) { 
    $('#payment-form').submit(function (event) { 
     var $form = $(this); 

     // Disable the submit button to prevent repeated clicks 
     $form.find('button').prop('disabled', true); 

     Stripe.card.createToken($form, stripeResponseHandler); 

     // Prevent the form from submitting with the default action 
     return false; 
    }); 
}); 

stripe.rb

Stripe.api_key = ENV["STRIPE_API_TEST_SECRET_KEY"] 

回答

1

这种响应通常出现在您尝试将订阅附加到没有附加卡标记的用户身上。从你的代码中,我猜测你正在遇到CardError,然后尽管如此,试图附加订阅,这是行不通的。

+2

我知道没有卡片令牌,但是如何添加卡片令牌? –

相关问题