【发布时间】:2021-09-04 09:00:20
【问题描述】:
在我的 Stripe 实现中,用户可以像这样添加新的 payment methods:
class PaymentMethodsController < ApplicationController
def index
@payment_methods = current_account.payment_methods
end
def new
setup_intent = Stripe::SetupIntent.create({
:payment_method_types => ['card', 'sepa_debit'],
:customer => current_account.stripe_id
})
@client_secret = setup_intent.client_secret
end
def create
flash[:success] = "Payment method created."
redirect_to payment_methods_path
end
end
(不过,确切的实现在这里并不重要。)
我还将每个用户的付款方式的副本存储在我的数据库中,以便能够在我的控制器的index 视图中向用户显示它们。
现在的问题是我正在使用 Stripe 的 webhook 创建这些数据库条目,并且这些 webhook 通常需要几秒钟才能访问我的应用程序。
因此,当我在用户创建新付款方式后将其重定向到付款方式列表 (payment_methods_path) 时,最新的付款方式通常在那里不可见,这非常令人困惑。只有当用户重新加载他们的页面时,新条目才会可见(因为届时 Stripe 的 webhook 会成功)。
有没有办法延迟 Rails 控制器操作,直到某个 webhook 成功,甚至延迟固定的秒数(例如 5)?
我的订阅也面临同样的问题,我的订阅只有在 webhook 成功后才在本地创建。在此之前,我的用户仍处于免费计划中几秒钟,这不是一个大规模问题,但我的许多用户仍然感到非常困惑。
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails stripe-payments webhooks