Полоса: получение последних 4 цифр кредитной карты - PullRequest
0 голосов
/ 02 ноября 2018

Я обновил 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. Поэтому я ожидаю, что это будет где-то в этом объекте. Но я не могу найти это. Примечания к выпуску можно найти здесь . Спасибо.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

В старом мире Stripe использовался только один тип платежа, который вы могли прикрепить к Клиенту; в частности, Card -объекты . Вы должны создать Card -объект , используя Stripe.js / v2 или Конечная точка создания токена API до первая создать Token -объект и , затем присоедините этот токен к Customer -объекту с помощью конечной точки API создания карты .

Как только Stripe расширился для поддержки ряда других способов оплаты, в Stripe была добавлена ​​поддержка нового типа объекта, который инкапсулировал ряд способов оплаты (включая кредитные карты) под названием Source -объекты . Source -объект создается либо с помощью Stripe.js / v3 , либо с помощью конечной точки API-интерфейса Create Source . Он также может быть присоединен к Customer -объекту почти так же, как и Card -объектам , упомянутым выше, за исключением того, что они сохраняют свой тип объекта. Они все еще Source. Для этого вы используете конечную точку API Attach Source (которая в основном идентична упомянутой выше конечной точке API создания карты ).

Что я здесь понял, так это то, что теперь есть два разных типа объектов (или больше), которые можно ожидать увидеть в массиве sources (или Sources в .NET). Все эти методы наследуются от IPaymentSource -интерфейса. Поэтому, если вы знаете, что у вас есть Card -объект , возвращаемый, вы можете просто привести возвращенный объект к Card -классу .

Что-то вроде этого должно помочь вам:

CardLast4 = ((Card) stipeCustomer.Sources.Data[0]).Last4

Вы можете понять, что я имею в виду под наследованием, посмотрев на эту строку в файле Card -класса:

https://github.com/stripe/stripe-dotnet/blob/master/src/Stripe.net/Entities/Cards/Card.cs#L7

Удачи!

0 голосов
/ 17 ноября 2018

Начиная с Stripe.net.21.4.1, вот что работает:

var chargeService = new ChargeService();
var charge = chargeService.Get(id);    
CardLast4 = ((Card)charge.Source).Last4;

Становится трудно не паниковать, когда код ломается из-за всех микро-изменений, которые делает Stripe.

0 голосов
/ 02 ноября 2018

Таким образом, после отладки похоже, что Данные [0] должны быть разыграны как Карта, чтобы получить карту. Так будет CardLast4 = ((Card)stipeCustomer.Sources.Data[0]).Last4.

...