Я пытаюсь инициализировать клиента в первый раз. У меня есть форма, где они подписываются и все, и они ее подают. На клиенте происходит следующее:
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 более одного раза
Есть ли канонический способ сделать несколько запросов на сервере для одного токена?
Кажется, что вы столкнулись с этой проблемой, потому что вы случайно пытаетесь повторно использовать токен, чтобы создать новую карту для клиента, когда, без ведома, вы уже использовали этот токен, чтобы создать эту карту для этого пользователь. Создание клиента с сохраненной картой на самом деле намного проще, чем вы ожидаете: когда вы инициализируете объект клиента маркером, 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.
Сообщите мне, если это решит вашу проблему!