问题描述
我当前正在构建一个使用条带化的应用程序,当付款成功时,用户将遵循 redirect_to session.delete(:return_to)。付款失败或出现错误时,如何控制用户去向何处?
也许我需要一个if语句?如果成功?
def create
@account = User.find_by_id(params[:account_id])
key = @account.access_code
Stripe.api_key = key
account_suid = @account.uid
@order = Order.find(params[:order])
charge = @order.amount * 100
fee = @order.amount * 1
token = params[:stripeToken]
customer = Stripe::Customer.create(email: @order.email,source: token)
Stripe::PaymentIntent.create({
customer: customer,amount: (charge).to_i,confirm: true,currency: 'gbp',payment_method_types: ['card'],application_fee_amount: (fee).to_i,},{
stripe_account: account_suid
})
options = {
stripe_id: customer.id
}
options.merge!(
card_last4: params[:user][:card_last4],card_exp_month: params[:user][:card_exp_month],card_exp_year: params[:user][:card_exp_year],card_type: params[:user][:card_brand]
)
OrderFiniJob.perform_now(@order)
redirect_to session.delete(:return_to),notice: "Your order has been successful ??"
end
解决方法
发生错误或付款被拒时,stripe会引发异常(some stripe erros)。 因此,您可以挽救错误并响应所需的内容,例如400
def create
...
redirect_to ...
rescue Stripe::StripeError
render status: :bad_request
end