无法在控制器中正确验证条带付款

时间:2015-03-26 10:14:27

标签: ruby-on-rails stripe-payments

所以我注意到我遇到了一个小问题。我使用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 已保存,则不会经历付款?

1 个答案:

答案 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支持事务时才有效。我不知道或保证这是解决方案。 如果客户电话仍然通过但未验证付款是否有效,那么您无能为力。