【发布时间】:2014-03-28 09:37:36
【问题描述】:
我发现如果用户第二次购买产品,我的 Stripe 仪表板中就会创建一个新客户。我希望这样,一旦客户进行了第一次购买,后续购买将向该现有客户及其保存的卡收取费用。 我的应用正在运行 Rails 4。
charges_controller.rb
def create
@user = current_user
@gift = Gift.friendly.find(params[:gift_id])
@charge = Charge.new(charge_params)
@codes = Code.all
@code = @gift.codes.where(:used => false).order("created_at ASC").first
token = params[:stripeToken]
if @user.customer_id.nil?
# Create customer
customer = Stripe::Customer.create(
:card => token,
:email => @user.email
)
# Charge the customer instead of the card
Stripe::Charge.create(
:amount => (@gift.price * 100).to_i,
:currency => "cad",
:customer => customer.id
)
# Customer_id is set to the Stripe customer.id
customer_id = customer.id
# If the transaction is approved
if @charge.save
# And user selects save_cc
if @charge.save_cc == true
# Update User's cusomter_id field to the var
@user.update_attributes(:customer_id => customer_id)
send_code(@user, @gift, @charge, @code)
else
send_code(@user, @gift, @charge, @code)
end
else
render 'charges/new'
end
else
# If user already has customer_id
Stripe::Charge.create(
:amount => (@gift.price * 100).to_i,
:currency => "cad",
:customer => @user.customer_id
)
if @charge.save
send_code(@user, @gift, @charge, @code)
else
render 'charges/new'
end
end
end
【问题讨论】:
-
请允许我正面批评。这段代码很难看,你重复了很多代码,对于控制器操作来说太多了。尝试先将其干燥,我相信会修复一些错误。
标签: ruby-on-rails ruby-on-rails-4 stripe-payments