从 Stripe 检索客户的默认卡和活动卡

Retrieve Customer's default and active card from Stripe

我正在尝试检索客户的默认卡和活动卡。 (还要记住,使用我的编码,客户始终可以拥有一张卡,这意味着如果有办法解决它,它可以提供帮助)。

几个月前,我使用了这个运行良好的代码段。 Stripe 似乎进行了一些更新,但我现在无法使用它。

current_user.stripe_card_id = customer.active_card.id

我得到的错误是

undefined method `active_card' for #Stripe::Customer

如果您需要更多信息,请告诉我。

编辑:customer.default_card.id 也不起作用。

customer = Stripe::Customer.retrieve(customer_id_on_stripe)

first_3_cards = customer.sources.all(limit: 3, object: 'card')[:data]

将return个卡片数组,如果要取bank_accounts

first_3_bank_accounts = customer.sources.all(limit: 3, object: 'bank_account')[:data]

我用 customer.methods 检查了方法并发现了这个 (default_source):

current_user.stripe_card_id = customer.default_source

现在工作正常。谢谢

默认卡 ID 将在 客户对象的 "default_source"

中可用
{
  "id": "cus_GACkqbqFD8RQw4",
  "object": "customer",
  "default_source": <DEFAULT CARD ID HERE> 
   ...
}

在此处阅读更多内容:https://stripe.com/docs/api/customers

[编辑] 此外, 值得注意的是,当您请求属于特定客户的所有卡的列表时,默认卡始终位于结果的顶部。因此,您还可以通过请求客户卡并添加 1 的限制来获得默认卡。

关于如何实现的信息:https://stripe.com/docs/api/cards/list

支付方式API - 2020 年更新

如果您已从旧的来源API切换到新的付款方式API,那么您应该知道与旧的 Sources 不同,客户没有默认的 Payment Method

现在,您可以将默认付款方式附加到订阅对象:

Stripe::Subscription.update(
  'sub_8epEF0PuRhmltU',
  {
    default_payment_method: 'pm_1F0c9v2eZvKYlo2CJDeTrB4n',
  }
)

或作为 customer.invoice_settings.default_payment_method

Stripe::Customer.update(
  'cus_FOcc5sbh3ZQpAU',
  {
    invoice_settings: {default_payment_method: 'pm_1vvc9v2eZvKYlo2CJDeTrB4n'},
  }
)

这是整个Stripe documentation

无论变化如何,依靠客户的 default_source 都是安全的。您可以看到 here 如果未设置 invoice_settings.default_payment_methodsubscription.default_payment_method,订阅仍将使用客户的 default_source