Как создать клиента и карту за одно действие с помощью Stripe?

6

Я пытаюсь инициализировать клиента в первый раз. У меня есть форма, где они подписываются и все, и они ее подают. На клиенте происходит следующее:

var cardValues = AutoForm.getFormValues('credit-card-form').insertDoc;
Stripe.createToken(cardValues, function (err, token) {
  if (!err && token) {
    Meteor.call('Stripe.initializeCustomer', token);
  }
});

На сервере, я пытаюсь сделать что-то вроде этого:

Meteor.methods({
  'Stripe.initializeCustomer': function (token) {
    var Stripe = StripeAPI(process.env.STRIPE_KEY);
    // some validation here that nobody cares about
    Stripe.customers.create({
      source: token
    }).then(function (customer) {
      return Stripe.customers.createCard(customer.id, {
        source: token
      })
    }).catch(function (error) {
      // need to do something here
    })
  }
});

Казалось бы, API-интерфейс Stripe не нравится

Ошибка необработанного отказа: вы не можете использовать маркер Stripe более одного раза

Есть ли канонический способ сделать несколько запросов на сервере для одного токена?

  • 0
    Похоже, что вы передаете весь словарь токенов, когда таким образом я думаю, что вы должны передавать только tokenID при создании клиента.
Теги:
stripe-payments

1 ответ

7
Лучший ответ

Кажется, что вы столкнулись с этой проблемой, потому что вы случайно пытаетесь повторно использовать токен, чтобы создать новую карту для клиента, когда, без ведома, вы уже использовали этот токен, чтобы создать эту карту для этого пользователь. Создание клиента с сохраненной картой на самом деле намного проще, чем вы ожидаете: когда вы инициализируете объект клиента маркером, Stripe API идет вперед и сохраняет эту карту вместе с новым клиентом. То есть, вы можете сразу же начать и возлагать на клиента ответственность за создание, как в:

Stripe.customers.create({
  source: token.id
}).then(function (customer) {
    Stripe.charge.create({
       amount: 1000,
       currency: 'usd',
       customer: customer.id 
    });
});

Для получения дополнительной информации я бы рекомендовал документы Stripe в https://support.stripe.com/questions/can-i-save-a-card-and-charge-it-later и https://stripe.com/docs/api/node#create_customer.

Сообщите мне, если это решит вашу проблему!

  • 0
    Не знал, что это автоматически добавило карту пользователю, это было намного проще, чем я думал. Безопасно ли сохранять объект customer в коллекции только на стороне сервера?
  • 0
    Да, абсолютно безопасно хранить все, что возвращено из API, так, как вы захотите. На самом деле злоумышленник не может ничего сделать с клиентом Stripe или даже с идентификатором карты без доступа к секретному ключу API вашей учетной записи.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню