【问题标题】:Rails - Stripe::InvalidRequestError, must provide source or customerRails - Stripe::InvalidRequestError,必须提供来源或客户
【发布时间】:2017-02-03 04:20:33
【问题描述】:

我在尝试为我的 Rails 应用程序实施付款流程时遇到上述错误。这是完整的错误-

我尝试过 source: stripe_token 和 source: 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

我对此感到有些困惑,因此不胜感激。我现在尝试了各种选择,但没有得到任何结果。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller stripe-payments


    【解决方案1】:

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

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

    但是,您仍然必须首先通过 Stripe 表单获取用户的信用卡信息,并使用作为 source 返回的令牌 Stripe。

    在执行收费请求之前,您是否以任何方式获取了用户的信用卡信息?

    【讨论】:

      猜你喜欢
      • 2016-01-03
      • 2019-03-31
      • 1970-01-01
      • 2017-02-05
      • 2017-07-18
      • 2020-08-10
      • 2020-11-05
      • 2017-04-25
      • 2016-03-28
      相关资源
      最近更新 更多