如何从Ruby块中为Stripe客户收费时跳过失败的卡片

时间:2016-08-02 17:54:16

标签: ruby-on-rails ruby stripe-payments

我想在Stripe中为Rails中的订单列表创建费用,如下所示:

Orders.all.each do |order|
  charge = Stripe::Charge.create(
    :amount   => 100,
    :currency => "usd",
    :customer => order.user.stripe_customer_id
  )
  order.id = charge.id
end

但是当Stripe::Charge.create遇到失败的卡时,它会抛出Stripe::CardError: Your card was declined错误并且Ruby块将停止,从而阻止其他订单被收费。

有没有办法可以跳过卡被拒的订单,这样可以收取剩余的订单?

由于

1 个答案:

答案 0 :(得分:2)

使用rescue怎么样?

Orders.all.each do |order|
  begin 
    charge = Stripe::Charge.create(
      amount: 100,
      currency: "usd",
      customer: order.user.stripe_customer_id
    )
    order.id = charge.id
  resuce Stripe::CardError => e
    # do something useful with the exception
  end
end

这是简短的方法。您不希望将异常用作控制流。 您想检查引发该错误的内容并使用if进行检查,以防止create引发异常