使用 Stripe Connect 时,如何处理 'account with this email already exists' 错误?

When using Stripe Connect, how to handle 'account with this email already exists' errors?

在开发与 Stripe 帐户连接的应用程序时,我 运行 遇到了一个问题。如果给定电子邮件的帐户已经存在,我无法创建新帐户。 Stripe 抛出错误。

但是我如何连接到现有帐户?我找不到任何地方可以这样做。

为清楚起见,失败的代码是:

Stripe::Acount.create(managed: false, email: 'Foo@UserEmail.address')

我正在创建一个 Stripe::Account 对象,而不是 Stripe::Customer 对象。如果电子邮件已经存在于 Stripe 的 API 上,上面的代码会抛出异常,但不会向我提供任何连接信息。

我担心的是,如果已经拥有 Stripe 帐户的用户试图加入该网站,我该如何 link 将其注册。

对于 Stripe Gem,如果帐户已经存在,我会使用类似这样的东西:

Stripe::Customer.retrieve(@user.stripe_id)

你可以这样做:

customer = if @user.stripe_id?
              Stripe::Customer.retrieve(@user.stripe_id)
            else
              Stripe::Customer.create(email: @user.email)
            end

我通常将 stripe_id 与关联的模型一起存储,但您可以使用 Stripe API 来检索它。

更新

我想念你的问题。如果您谈论的是不同的帐户(而不是客户)。您可以使用 Stripe API 检索所有帐户的列表,然后 select 根据电子邮件检索您需要的帐户。

List all accounts with Stripe API

然后使用相应的电子邮件检索帐户:

Stripe::Account.retrieve("account_id")

answer 为帐户转换的建议:

accounts = Stripe::Account.all

account_i_need = accounts.select do |c|
  c.email == "foo@bar.com"
end

由于您使用的是独立帐户,如果用户已经拥有使用该电子邮件地址的 Stripe 帐户,您将无法创建该帐户。

在这种情况下,您必须使用 OAuth flow 将现有帐户连接到您的平台。

请注意,您可以使用 OAuth 流程来处理这两种情况。如果用户已有 Stripe 帐户,他们可以登录现有帐户进行连接,如果没有,他们将能够创建一个新帐户并同时进行连接。