Извлечение полосатой карты — PaymentMethodService против CardService

#stripe-payments

#stripe-платежи

Вопрос:

Используя CLI Stripe для создания подписок для пользователей, я заметил, что могу успешно извлекать данные их кредитной карты для отображения (например, последние 4, дата и т. Д.), Используя следующий фрагмент кода:

  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? Если я хочу решить проблему «Как я могу показать все кредитные карты, которые есть у пользователя, на их странице выставления счетов в моем пользовательском веб-приложении», какую службу я использую?

Большое вам спасибо за ваше время!

Ответ №1:

Вы всегда должны использовать PaymentMethodService.

https://stripe.com/docs/payments/payment-methods

По историческим причинам в API Stripe существует несколько разных типов объектов для представления карт (объект Card с идентификатором card_xxxx , исходный объект с идентификатором src_xxxx type:card и теперь PaymentMethod с идентификатором pm_xxx ). Все они немного отличаются и имеют разную форму. Однако карты и исходные коды по существу устарели.

PaymentMethods заменяет их все и полностью обратно совместим; например, если вы использовали объект Card в прошлом и сохранили их для клиентов, вы можете использовать PaymentMethodService.список для возврата обоих этих объектов Card (и любых исходных или платежных методов), и они возвращаются в форме PaymentMethod через уровень совместимости. Это означает, что вашему коду не нужно думать о различиях в базовых объектах, и вы можете использовать PaymentMethodService как канонический способ работы с сохраненными картами клиента.

https://stripe.com/docs/payments/payment-methods/transitioning#compatibility

Однако при тестировании с помощью плагина WordPress для внесения одного платежа новому клиенту (то есть не подписки, а разового платежа) приведенный выше код не возвращает кредитные карты!

Вероятно, это потому, что плагин WordPress создает PaymentMethod или создает исходные коды, в зависимости от того, когда он был написан. Таким образом, вы не получите те, которые возвращаются с помощью CardService, но если вы используете PaymentMethodService, вы получите, из-за этого уровня совместимости, так что это идеальный пример того, почему вы должны использовать его здесь, и это канонический способ использования Stripe в будущем.