上下文:
我正在使用条纹结帐来接受铁路中的一次性付款。 我有一个充电控制器,如下所示。 我最初使用条带webhook来收听charge.succeeded,但由于webhooks的异步特性而遇到了一些问题。 我已将业务逻辑移至控制器。 如果客户费用成功,那么我将客户和其他一些细节保存到数据库。
我的问题:
此检查是否足以确保收费成功?
if charge["paid"] == true
Stripe :: Charge.create的Stripe文档指出,“ 如果充电成功,则返回充电对象。如果出现问题,会引发错误。常见的错误来源是无效或过期的卡,或可用余额不足的有效卡。“
我的ChargesController:
class ChargesController < ApplicationController
def new
end
def create
# Amount in cents
@amount = 100
temp_job_id = cookies[:temp_job_id]
customer_email = TempJobPost.find_by(id: temp_job_id).company[:email]
customer = Stripe::Customer.create(
:email => customer_email,
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd',
:metadata => {"job_id"=> temp_job_id}
)
# TODO: charge.paid or charge["paid"]
if charge["paid"] == true
#Save customer to the db
end
# need to test this and refactor this using begin-->rescue--->end
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charges_path
end
end
答案 0 :(得分:12)
是的,这就是你需要做的。如果充电成功,Stripe将返回Charge对象,您可以检查其paid
参数。如果收费失败,我们会抛出异常。
干杯, 拉里
PS我在Stripe的支持工作。