所以我注意到我遇到了一个小问题。我使用Stripe作为我的支付处理器,发生的事情非常简单。我的代码中有一个错误,它不允许我保存customer_id_token
并更改名为subscription active
的布尔值。
然而付款仍然通过(在条带日志中确认)。因此很明显我没有适当的验证,因为这应该永远不会发生。以下是我的代码现在的样子:
def create
customer = Stripe::Customer.create(
:email => current_user.email,
:plan => params[:plan_id],
:card => params[:stripeToken]
)
current_user.update_attributes!(
:stripe_customer_token => customer.id,
:subscription_active => true,
:plan_id => params[:plan_id]
)
redirect_to root_url, notice: 'Successfully subscribed'
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charges_path
end
我可以看到他们显然没有真正相互联系,我的问题是如何将其变成某些内容,如果customer_token
已保存,则不会经历付款?
答案 0 :(得分:0)
好,
我打算对此进行拍摄,问题是我不知道Stripe是如何工作的,所以我不能保证这个有效。 我只是想证明交易的用法:
def create
ActiveRecord::Base.transaction do
customer = Stripe::Customer.create(
email: current_user.email,
plan: params[:plan_id],
card: params[:stripeToken]
)
current_user.update_attributes!(
stripe_customer_token: customer.id,
subscription_active: true,
plan_id: params[:plan_id]
)
end
redirect_to root_url, notice: 'Successfully subscribed'
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charges_path
end
我肯定会添加到您的current_user模型,是验证令牌不能为空的验证:
class User < ActiveRecord::Base
validates :stripe_customer_token, presence: true
end
这样,当未提供令牌时,更新失败,回滚事务。虽然如果第一次调用失败,它也应该有效。
但是,这仅在此Stripe :: Customer支持事务时才有效。我不知道或保证这是解决方案。 如果客户电话仍然通过但未验证付款是否有效,那么您无能为力。