ruby-on-rails - Ruby on Rails - Stripe::CardError 未捕获被阻止的付款
问题描述
我正在开发一个基于订阅的网站,其内容位于与 Stripe 连接的付费墙后面。如果收费被拒绝或阻止,帐户创建应停止并返回帐户创建屏幕,并显示错误消息。
这是我的异常代码:
class RegistrationsController < Devise::RegistrationsController
rescue_from Stripe::CardError, with: :stripe_card_error
def stripe_card_error(e)
flash[:error] = "#{e.error.message}"
redirect_to request.referrer || "registrations#new" and return
end
def new
#
end
def create
#
end
//etc. etc.
它适用于一般卡拒绝,但是,当我运行 Stripe 提供的测试卡号时,明确表示它将返回欺诈性,救援不会触发并且用户帐户已创建。
我进入我的条纹仪表板,我可以看到客户、订阅等,但付款被阻止。
我原以为 Stripe::CardError 会捕捉到这一点,但显然不是。
如果付款因潜在欺诈而被阻止,我不希望创建用户帐户。我想将其视为带有适当错误消息的一般卡片拒绝。
是否有另一个我可以挽救的错误或另一种方法来做到这一点?我在 Stripe 的 API 中找不到任何关于处理此问题的最佳方法的信息。
解决方案
Stripe在其 API 参考中提供了一个示例错误处理片段。该片段表明您应该捕获并处理以下所有内容:
Stripe::CardError
Stripe::RateLimitError
Stripe::InvalidRequestError
(这可能适用于这种特定情况)Stripe::AuthenticationError
Stripe::APIConnectionError
Stripe::StripeError
(这也可能是你想要的)
而且,如果一切都失败了,你应该执行一个将军rescue
来捕捉其他任何东西。
您只能执行常规rescue
并检查错误以确定引发了哪个特定错误。
推荐阅读
- javascript - 从 html input="date" 到 html 选择下拉格式
- python-3.x - 使用自定义简历在 Sklearn 中进行交叉验证
- html - 我的代码和命令中有 crud 问题
- php - 计算项目中方法的行数
- javascript - 如何从javascript返回多个值到jsp
- javascript - Trying to compare items in an array to see if they are the same
- mysql - "(" 在这个服务器版本的这个位置无效
- google-cloud-firestore - 如何在 Cloud Firestore 安全规则中实施写入速率限制?
- powershell - Test-WSMan 使用 powershell 失败
- karate - 如何将 karate-gatling 与 Grafana 和 influxdb 集成以在线监控结果