Stripe payments 条带:获取卡信息,以便客户可以更新其卡

Stripe payments 条带:获取卡信息,以便客户可以更新其卡,stripe-payments,Stripe Payments,我的应用使用带条带的订阅 我想创建一个标准的“账户”页面,该页面将列出客户的当前卡信息(如“万事达卡”和卡号的最后4个),并为客户提供更新该信息的选项 我被第一件事难住了——找回当前的信用卡信息。为此,我需要当前卡的id。我尝试了“listSources”方法,但这会在卡信息应该在的位置返回空白数据。我需要做什么才能得到那张卡的信息 以下是我尝试过的: (我正在使用Node并运行此服务器端) 我找到的最接近的方法是: 这将返回信息(并没有错误),但文档称此方法应返回一个包含每个卡的卡id的卡数据

我的应用使用带条带的订阅

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

我被第一件事难住了——找回当前的信用卡信息。为此,我需要当前卡的id。我尝试了“listSources”方法,但这会在卡信息应该在的位置返回空白数据。我需要做什么才能得到那张卡的信息

以下是我尝试过的:

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

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

这将返回信息(并没有错误),但文档称此方法应返回一个包含每个卡的卡id的卡数据数组。在测试中,数据数组总是返回空

我正在使用一个客户id进行测试,该id具有有效订阅,并且我可以在我的Stripe仪表板上看到一张卡

为什么数据数组返回为空

注意:还有一个,应该会返回卡的详细信息,但是这个方法需要你有你想要的信息卡的id,这是我现在无法获得的

将此转换为答案

Stripe最近已经推出,它取代(并且独立于)旧的令牌和源API


OP的问题是,它们的集成会创建PaymentMethod对象,这些对象不会显示在源列表中,而是可以通过
条带.paymentMethods.list

访问。您确定您的应用程序使用的是卡/源,而不是较新的条带吗?如果您最近编写了集成,很可能您正在使用较新的API。这非常有用。我认为这确实是问题所在。当我运行stripe.paymentMethods.list时。。。它返回有关付款方式的信息,包括卡类型和号码的最后4个。所以我猜这就是我需要使用的。谢谢要更新向客户收费的卡,最佳做法是使用“stripe.paymentMethods.update”功能吗?您只能更新PaymentMethod上的地址和到期日期。一个不同的卡号应该通过一个新的PaymentMethod记录来处理。啊,明白了。我可以使用“paymentsMethods.list”方法来显示付款方式(我想,最新输入的付款方式会首先显示——这就是我显示的卡),然后,如果客户单击“更改计费方式”按钮,我会获得他们的新详细信息并运行paymentMethods.create函数。我能够正确显示卡的详细信息,然后可以让客户使用条带元素输入新卡信息。然后,我似乎使用createPaymentMethod得到了一个“新的支付方法”结果,如下所述:但是,这似乎并没有实际更新客户的卡。在我的stripe仪表板上,客户没有显示任何新活动或正在创建的任何新卡。我还从客户端运行createPaymentMethod,这似乎是错误的——但如果我尝试从服务器端运行,我不知道如何传递用元素收集的卡片详细信息(通过post调用在url中传递它们似乎是错误的)。@9gt53wS“若要将此PaymentMethod用作发票或订阅付款的默认方法,请将客户的发票\设置。默认\付款\方法设置为PaymentMethod的ID。”。“是的,你应该在客户端制作PMs。您永远不希望原始卡的详细信息进入您的服务器-这将您置于PCI范围内,这是一项巨大而昂贵的任务。谢谢。我试试看。顺便说一句,我所说的服务器端:我没有在自己的服务器上保存任何付款信息。相反,我假设我应该运行createPaymentMethod“服务器端”——这意味着使用Lambda函数。所以我假设应该在Lambda上运行该方法,而不是直接从客户端运行。但是从客户那里做起来比较容易,所以我觉得这很好。我去看看。
var stripe = require('stripe')(STRIPE_TOKEN);

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