【问题标题】:Stripe: Get card information so customer can update their cardStripe:获取卡信息,以便客户可以更新他们的卡
【发布时间】:2020-01-07 01:05:04
【问题描述】:

我的应用通过 Stripe 使用订阅。

我想创建一个标准的“帐户”页面,其中将列出客户当前的卡信息(如“万事达卡”和卡号的最后 4 位),并为客户提供更新该信息的选项。

我被困在第一块——取回当前的卡片信息。为此,我需要当前的 card_id。我已经尝试过“listSources”方法,但这会返回卡信息应该是的空白数据。我需要做什么才能获得该卡信息?

这是我尝试过的:

(我正在使用 Node,并运行此服务器端)

我找到的最接近的方法是here:

var stripe = require('stripe')(STRIPE_TOKEN);

stripe.customers.listSources(
  CUSTOMER_ID,
  {object: 'bank_account', limit: 3},
  function(err, cards) {
    // asynchronously called
  }
);

这会返回信息(没有错误),但文档说此方法应返回包含卡片 ID 的卡片数据数组。在测试中,数据数组总是返回空。

我正在使用具有有效订阅的客户 ID 和一张我可以在我的 Stripe 仪表板上看到的卡片进行测试。

为什么返回的数据数组是空的?

注意:还有一个retrieve source method,它应该返回卡的详细信息,但是这种方法需要你有你想要信息的卡的ID,这就是我现在无法得到的。

【问题讨论】:

  • 您确定您的应用使用卡片/资源,而不是更新的 PaymentMethods Stripe 走向?如果您最近编写了集成,很可能您使用的是较新的 API。
  • 这真的很有帮助。我认为这确实是问题所在。当我运行 stripe.paymentMethods.list... 时,它会返回有关付款方式的信息,包括卡类型和数字的最后 4 位。所以我猜这是我需要使用的。谢谢!
  • 要更新向客户收费的卡,最佳做法是使用“stripe.paymentMethods.update”功能吗?
  • 您只能在 PaymentMethod 上更新地址和到期日期。应通过 PaymentMethod 记录处理不同的卡号。
  • 啊,明白了。我可以使用“paymentsMethods.list”方法来显示付款方式(最近输入的首先出现,我假设这将是我显示的卡),然后,如果客户单击“更改计费方式”按钮,然后我得到他们的新详细信息并运行 paymentMethods.create 函数。

标签: stripe-payments


【解决方案1】:

将其转换为答案...

Stripe 最近推出了 PaymentMethods,它取代了(并且独立于)旧的 Tokens and Sources API。

OP 的问题是他们的集成创建了 PaymentMethod 对象,这些对象不会显示在源列表中,但可以通过 stripe.paymentMethods.list 访问。

【讨论】:

  • 我能够正确显示卡的详细信息,然后能够让客户使用 Stripe 元素输入新的卡信息。然后,似乎我使用 createPaymentMethod 获得了“新付款方式”结果,如下所述:stripe.com/docs/js/payment_intents/create_payment_method
  • 但是,这似乎并没有真正更新客户的卡。在我的条纹仪表板上,客户没有显示任何新活动或正在创建任何新卡。我也在从客户端运行 createPaymentMethod,这似乎是错误的——但如果我尝试从服务器端运行,我不确定如何传递与元素一起收集的卡详细信息(在 url 中传递它们似乎是错误的一个邮政电话)。
  • @9gt53wS stripe.com/docs/api/payment_methods/attach "要将此 PaymentMethod 用作发票或订阅付款的默认设置,请将 Customer 上的 invoice_settings.default_payment_method 设置为 PaymentMethod 的 ID。"
  • 是的,您应该让 PM 成为客户端。您永远不希望将原始卡详细信息发送到您的服务器 - 这会将您置于 PCI 范围内,这是一项巨大而昂贵的工作。
  • 谢谢。我会试试看。顺便说一句,我所说的服务器端是什么意思:我没有在自己的服务器上保存任何付款信息。相反,我假设我应该运行 createPaymentMethod“服务器端”——即使用 Lambda 函数。所以我假设我应该在 Lambda 上运行该方法,而不是直接从客户端运行。但是从客户那里更容易做到这一点,所以这对我来说很好。我去看看。
猜你喜欢
  • 1970-01-01
  • 2014-02-20
  • 2016-08-08
  • 2013-04-20
  • 2018-09-11
  • 2020-04-24
  • 1970-01-01
  • 2018-10-13
  • 2018-12-04
相关资源
最近更新 更多