0

当我尝试为我的Rails应用程序实现付款过程时出现上述错误。这是错误的全 -Rails - Stripe :: InvalidRequestError,必须提供源或客户

enter image description here

我已经试过来源:stripe_token和来源:stripe_charge_id但既不是那些工作。

下面是在我的预订模式 -

Booking.rb

class Booking < ActiveRecord::Base 

    belongs_to :event 
    belongs_to :user 

    validates :quantity, presence: true, numericality: { greater_than: 0 } 
    validates :event, presence: true, numericality: {greater_than_or_equal_to: 0 } 

    before_save :set_price_to_zero_if_free 

    def set_price_to_zero_if_free 
     self.event.price >= 1 unless self.event.is_free 
    end 

    def reserve 
     # Don't process this booking if it isn't valid 
     #if valid? 

     # We can always set this, even for free events because their price will be 0. 
     #self.total_amount = booking.quantity * event.price 

      # Free events don't need to do anything special 
      if event.is_free? 
      save! 

      # Paid events should charge the customer's card 
     else 

      begin 
      charge = Stripe::Charge.create(amount: total_amount, currency: "gbp", card: stripe_charge_id, description: "Booking number #{id}", items: [{quantity: quantity}]) 
      self.stripe_charge_id = charge.id 
      save! 
       rescue Stripe::CardError => e 
       errors.add(:base, e.message) 
      false 
      end 
     end 
    end 
end 

我的控制器 -

bookings_controller.rb

class BookingsController < ApplicationController 

    before_action :authenticate_user! 

    def new 

     @event = Event.find(params[:event_id]) 
     @booking = @event.bookings.new(quantity: params[:quantity]) 
     @booking.user = current_user 


    end 

    def create 

     # actually process the booking 
     @event = Event.find(params[:event_id]) 
     @booking = @event.bookings.new(booking_params) 
     @booking.user = current_user 

      if 
       @booking.reserve 
       flash[:success] = "Your place on our event has been booked" 
       redirect_to event_path(@event) 
      else 
       flash[:error] = "Booking unsuccessful" 
       render "new" 
      end 
    end 


    private 

    def booking_params 
     params.require(:booking).permit(:stripe_token, :quantity, :event_id, :stripe_charge_id) 
    end 



end 

我有点在这个难住,所以任何帮助表示赞赏。我已经尝试了各种选择,但没有获得任何地方。

回答

1

您应该检查条纹文档:https://stripe.com/docs/api#create_charge。您的收费请求缺少sourcecustomer参数。

就我个人而言,我会先创建一个Stripe客户,并将客户ID传递给收费请求。

但是,您仍然需要通过可能的条带格式获取用户的信用卡信息,并使用作为source返回的令牌条带。

在执行收费请求之前,您是否已获得用户信用卡信息?

+0

如果您有任何更新,请让我知道。 –

相关问题