Stripe - добавить новую карту существующего клиента
Мне нужно добавить карту к уже существующему клиенту. Вот что я сделал:
1. получить токен из представления пользователя
card_token = request.POST('stripeToken')
2. получить клиента
customer = stripe.Customer.retrieve('cus_xxxxxxxxxx')
3. добавьте карту этому клиенту
customer.Cards.create(card=card_token)
Это # 3, что у меня проблемы, потому что похоже, что у клиента нет карт методов, но я видел, как люди делали это в другом месте.
Как мне это достичь?
Ответы
Ответ 1
Если вы используете версию 2015-02-18
API или позже, то атрибут cards
был изменен на sources
, как вы можете видеть в списке изменений
Документация на API-интерфейсе для создания карт показывает следующий код:
customer = stripe.Customer.retrieve('cus_xxxxxxxxxx')
customer.sources.create(card=card_token)
Вы можете найти свою версию API в ключах API в панели управления, и вы также можете использовать заголовок Stripe-Version
, чтобы заставить ваш запрос API использовать более старый API версии, так что cards
все еще работает, как описано в документации Versioning:
stripe.api_version = '2015-01-26'
Ответ 2
Обновление 2019 года: Ситуация немного изменилась с требованиями строгой аутентификации клиентов (SCA) в Европе; Теперь вы, вероятно, захотите использовать API-интерфейс Setup Intents для предварительной оплаты данных карты для будущих платежей.
Этот новый API совместим как с PCI, так и с SCA. Вы можете узнать больше здесь
или посмотрите этот пример кода на GitHub: https://github.com/stripe-samples/saving-card-without-payment.
Вы также можете сделать это полностью с Checkout сейчас!
Ответ 3
Здесь есть пример на нескольких языках и платформах.
https://stripe.com/docs/api#create_card
удачи
Ответ 4
Пример (customerId - cus_xxxxxxxxxx):
Stripe.apiKey = stripeApiKey;
Customer customer = Customer.retrieve(customerId);
Map<String, Object> cardParams = new HashMap<String, Object>();
cardParams.put("number", "4242424242424242");
cardParams.put("exp_month", "12");
cardParams.put("exp_year", "2018");
cardParams.put("cvc", "314");
Map<String, Object> tokenParams = new HashMap<String, Object>();
tokenParams.put("card", cardParams);
Token cardToken = Token.create(tokenParams);
Map<String, Object> sourceParams = new HashMap<String, Object>();
sourceParams.put("source", cardToken.getId()); //?
Card source = (Card) customer.getSources().create(sourceParams);
logger.info("Card created: " + source.toString());