Stripe payments 条带卡检索-PaymentMethodService与CardService

Stripe payments 条带卡检索-PaymentMethodService与CardService,stripe-payments,Stripe Payments,使用Stripe CLI为用户创建订阅,我注意到我可以通过利用以下代码片段成功检索要显示的信用卡详细信息(如last 4、date等): var service = new CardService(); var cardOptions = new CardListOptions { Limit = 3 }; var cards = awa

使用Stripe CLI为用户创建订阅,我注意到我可以通过利用以下代码片段成功检索要显示的信用卡详细信息(如last 4、date等):

 var service = new CardService();
             
            var cardOptions = new CardListOptions
            {
                Limit = 3 
            };
            var cards = await service.ListAsync(StripeCustomerId, cardOptions);
然而,使用WordPress插件测试向新客户收费(因此不是订阅,而是一次性收费),上述代码不会返回信用卡

然后我尝试了以下代码:

  var paymentMethodService = new PaymentMethodService();
            var pmList = paymentMethodService.List(new PaymentMethodListOptions { Customer = StripeCustomerId,
            Type = "card"});
它成功地返回了我用户的信用卡元数据,只需一次收费。然后我对我的订阅用户尝试了这段代码,它也成功地工作了

这让我得出这样的结论:如果我想可靠且有保证地从用户那里获得信用卡详细信息,我应该使用上面的第二个片段

…但这引出了一个问题-CardService和PaymentMethodService之间的区别是什么?如果我想解决“如何在自定义web应用程序的账单页面上显示用户拥有的所有信用卡”的问题,我应该使用哪种服务


非常感谢您抽出时间

您应该始终使用PaymentMethodService

出于历史原因,Stripe的API中有几种不同的对象类型用于表示卡(ID为
card\u xxxx
的对象,ID为
src\u xxxx
type:card
的对象,现在ID为
pm\u xxx
)。它们都略有不同,形状也不同。不过,卡片和资料来源基本上已被弃用

PaymentMethods取代了所有这些方法,并且完全向后兼容;例如,如果您过去使用过Card对象并将其保存给客户,则可以使用PaymentMethodService.list返回这些Card对象(以及任何源或PaymentMethods),并通过兼容层将其返回为PaymentMethods。这意味着您的代码不需要考虑底层对象之间的差异,您可以使用PaymentMethodService作为处理客户保存的卡的标准方式

然而,使用WordPress插件测试向新客户收费(因此不是订阅,而是一次性收费),上述代码不会返回信用卡

这可能是因为WordPress插件创建PaymentMethods,或者它创建源代码,这取决于它的编写时间。因此,使用CardService不会返回这些内容,但如果使用PaymentMethodService,则会返回,因为兼容层,所以这是一个完美的示例,说明了为什么要在此处使用它,这是今后使用Stripe的标准方法