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

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

相關問題