检查 Stripe 优惠券是否无效

Checking if a Stripe Coupon is invalid

我正在为 rails 使用条纹 gem,并且我正在尝试检查用户的优惠券代码是否无效。如果代码无效,则用户将被重定向到 users/show.html.haml

这是我的代码

if Stripe::Coupon.retrieve(current_user.coupon_code) == nil
  redirect_to user_path(current_user)
end

我认为从 Stripe 检索代码并检查值是否为 nil 会起作用,但我收到的错误消息是:

Stripe::InvalidRequestError in SubscribersController#new
No such coupon: *Whatever the invalid coupon name is (ex. "ASDF")*

知道这里发生了什么吗?我查看了 Ruby 的 Stripe 文档,但没有看到任何关于如何检查代码是否无效的信息。还有另一种方法来检查代码是否等于或不等于 nil?

如果您传递给 Stripe::Coupon.retrieve(...) 的优惠券 ID 不存在,请求将失败并引发 Stripe::InvalidRequestError 异常。

因此,不是将结果与 nil 进行比较,而是需要将对 Stripe::Coupon.retrieve(...) 的调用放在 begin/rescue/end 块中以捕获 Stripe::InvalidRequestError 异常。

您可以在此处找到有关 Stripe API 错误处理的更多信息:https://stripe.com/docs/api#errors

有关背景信息,请参阅
在 ruby、

  # @return [Boolean]
  # #
  def is_valid?(coupon)
    return false unless coupon.present?

    coupon_retrieved = Stripe::Coupon.retrieve(coupon)
    coupon_retrieved.valid == true

  rescue => error
    puts "#{error.class} :: #{error.message}"
    false
  end