缺少必需的参数:卡

时间:2014-03-13 19:55:01

标签: ruby-on-rails stripe-payments

在设置中,用户可以为Stripe创建一个新的卡片我得到Stripe::InvalidRequestError at /subscriptions/changecard。错误消息为Missing required param: card,并指向行@customer.cards.create({:card => @user.subscription.stripe_card_token})

如果用户有订阅,他们应该可以访问/订阅/更改卡并填写将添加新卡的表单。

订阅控制器:

  def new
    plan = Plan.find(params[:plan_id])
    @subscription = plan.subscriptions.build
    if params[:PayerID]
      @subscription.paypal_customer_token = params[:PayerID]
      @subscription.paypal_payment_token = params[:token]
      @subscription.email = @subscription.paypal.checkout_details.email
    end
  end

  def create
    @subscription = Subscription.new(params[:subscription])
    if @subscription.save_with_payment
      redirect_to @subscription, :notice => "Thank you for subscribing!"
    else
      render :new
    end
  end

  def show
    @subscription = Subscription.find(params[:id])
  end

  def paypal_checkout
    plan = Plan.find(params[:plan_id])
    subscription = plan.subscriptions.build
    redirect_to subscription.paypal.checkout_url(
      return_url: new_subscription_url(:plan_id => plan.id),
      cancel_url: root_url
    )
  end

    def updatesubscription
      @user = current_user
      @customer = Stripe::Customer.retrieve(@user.subscription.stripe_customer_token)
      @customer.update_subscription(:plan => "1", :prorate => true)
     current_user.save!
      flash.alert = 'Your subscription has been updated!'
      redirect_to root_url
     end

     def cancelsubscription
       @user = current_user
         @customer = Stripe::Customer.retrieve(@user.subscription.stripe_customer_token)
         @customer.cancel_subscription()
         current_user.save!
         flash.alert = 'Your subscription has been cancelled successfully!'
         redirect_to root_url
       end

       def showcard
         @user = current_user
         Stripe::Customer.retrieve(@user.subscription.stripe_customer_token).cards.all()
       end

        def changecard
       @user = current_user       
       @customer = Stripe::Customer.retrieve(@user.subscription.stripe_customer_token)

         card = @customer.cards.create({
           :card => @user.subscription.stripe_customer_token
         })

         @customer.default_card = card
         @customer.save
       end
end

查看:

Add new Credit Card
<%= form_for @user do |f| %>
  <% if @subscription.errors.any? %>
    <div class="error_messages">
      <h2><%= pluralize(@subscription.errors.count, "error") %> prohibited this subscription from being saved:</h2>
      <ul>
      <% @subscription.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.hidden_field :plan_id %>
  <%= f.hidden_field :stripe_card_token %>

  <div class="field">
    <%= radio_button_tag :pay_with, :card, true %>
    <%= label_tag :pay_with_card do %>
      <%= image_tag "visa.png" %>
      <%= image_tag "mastercard.png" %>
      <%= image_tag "discover.png" %>
      <%= image_tag "american_express.png" %>
      <%= image_tag "jcb.png" %>
  </div>
  <% end %>

  <div id="billing_fields">
    <div class="field">
      <%= f.hidden_field :user_id, :value => current_user.id %> 
      <%= f.label :email %>
      <%= f.text_field :email %>
    </div>
    <% if @subscription.payment_provided? %>
      Payment has been provided. Click "Subscribe" to complete the subscription.
    <% else %>
      <div class="field">
        <%= label_tag :card_number, "Credit Card Number" %>
        <%= text_field_tag :card_number, nil, name: nil %>
      </div>
      <div class="field">
        <%= label_tag :card_code, "Security Code on Card (CVV)" %>
        <%= text_field_tag :card_code, nil, name: nil %>
      </div>
      <div class="field">
        <%= label_tag :card_month, "Card Expiration" %>
        <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %>
        <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %>
      </div>
    <% end %>
    <div id="stripe_error">
      <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
    </div>
    <div class="actions">
      <%= f.submit "New Card" %>
    </div>
  </div>
<% end %>

路线:

  get "subscriptions/cancelsubscription"
  get "subscriptions/updatesubscription"
  get "subscriptions/changecard"


  resources :charges
  resources :subscriptions
  resources :plans
  get 'paypal/checkout', to: 'subscriptions#paypal_checkout'

0 个答案:

没有答案