我刚刚开始使用 Stripe,并按照他们的指南设置使用 Rails 结帐
就我而言,我让用户能够升级事件列表。
在我的事件模型中,我有一个 make_premium 方法:
def make_premium
self.update_attribute(:premium_event, true)
end
我的 event_controller 的升级操作基于 Stripe 的创建示例,除了我添加了一个 repond_to 块以将用户带回他们升级的事件并调用 make_premium 方法。
def upgrade
@event = Event.find_by_slug(params[:id])
# Amount in pence
@amount = 299
customer = Stripe::Customer.create(
:email => current_user.email,
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Premium Event Upgrade',
:currency => 'gbp',
:metadata => {'event_id' => @event.id, 'event_headline' => @event.headline}
)
respond_to do |format|
format.html { redirect_to @event, :notice => 'Event was successfully upgraded.' }
@event.make_premium
end
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to event_path(@event)
end
我想知道的是,a) 考虑到之后的救援,在这里可以使用对块的响应吗?b) 可以从这个块中调用我的 make_premium 方法吗?
我已经尝试过使用 Stripe 的 webhook,虽然 charge.suceeded 钩子运行良好,但如果上述方法足够,我可以避免额外的步骤。
任何对 Stripe 更有经验的人的见解将不胜感激。