我已经将Stripe.net升级到了最新版本20.3.0,现在我似乎找不到信用卡的.Last4。我有以下方法:
public void CreateLocalCustomer(Stripe.Customer stipeCustomer)
{
var newCustomer = new Data.Models.Customer
{
Email = stipeCustomer.Email,
StripeCustomerId = stipeCustomer.Id,
CardLast4 = stipeCustomer.Sources.Data[0].Card.Last4
};
_dbService.Add(newCustomer);
_dbService.Save();
}
但是现在stipeCustomer.Sources.Data[0].Card.Last4
说'IPaymentSource' does not contain a definition for 'Card'
。有人知道我现在如何获得卡的详细信息吗?流程是,我通过将Stripe令牌传递给Stripe来创建客户,然后得到上面的stripeCustomer。因此,我希望它位于该对象的某个位置。但是我找不到。可以在here中找到发行说明。
谢谢。
答案 0 :(得分:4)
在Stripe的旧世界中,您过去只能将一种付款方式附加给客户;具体来说,Card
-objects。您可以通过使用Card
-object或Stripe.js/v2先创建Create Token API Endpoint来创建Token
-object,然后创建Customer
-object然后 Create Card API Endpoint指向Source
-objects的令牌。
尽管Stripe扩展为支持许多其他付款方式,但Stripe支持新的对象类型,该对象类型封装了称为Source
-object的许多付款方式(包括信用卡)。通过使用Stripe.js/v3或Create Source API Endpoint创建Customer
-object。除了它们保留其对象类型之外,还可以通过与上述Card
-objects几乎相同的方式将其附加到Attach Source API Endpoint。他们仍然是Source
。您使用Create Card API Endpoint进行此操作(这与上述Card
-object完全相同)。
我要说的是,现在有两种不同的对象类型(或更多),您可以期望它们在sources
数组(或.NET中的Sources
)中返回。尽管所有这些方法都是从IPaymentSource
接口继承的。因此,如果您知道返回了Card
-class,则只需将返回的对象强制转换为https://github.com/stripe/stripe-dotnet/blob/master/src/Stripe.net/Entities/Cards/Card.cs#L7。
类似的事情应该可以帮助您:
CardLast4 = ((Card) stipeCustomer.Sources.Data[0]).Last4
通过查看Card
类文件中的这一行,您可以了解继承的含义:
https://www.db-fiddle.com/f/u3JHfUJAZMuRWsudyLpUaS/0
祝你好运!
答案 1 :(得分:1)
从Stripe.net.21.4.1
开始,这是有效的方法:
var chargeService = new ChargeService();
var charge = chargeService.Get(id);
CardLast4 = ((Card)charge.Source).Last4;
由于Stripe进行的所有微更改,在代码中断时不惊慌变得越来越困难。
答案 2 :(得分:0)
因此,在调试之后,似乎需要将Data [0]强制转换为Card才能获得Card。
因此它将是CardLast4 = ((Card)stipeCustomer.Sources.Data[0]).Last4
。