Подтвердить что ты не робот

Stripe - добавить новую карту существующего клиента

Мне нужно добавить карту к уже существующему клиенту. Вот что я сделал:

1. получить токен из представления пользователя

card_token = request.POST('stripeToken')

2. получить клиента

customer =  stripe.Customer.retrieve('cus_xxxxxxxxxx')

3. добавьте карту этому клиенту

customer.Cards.create(card=card_token)

Это # 3, что у меня проблемы, потому что похоже, что у клиента нет карт методов, но я видел, как люди делали это в другом месте.

Как мне это достичь?

4b9b3361

Ответ 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 сейчас!

Ответ 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());