如何创建客户和卡在一个单一的行动与条纹

How to create both a customer and a card in a single action with Stripe?

本文关键字:单一 一个 创建 何创建 客户      更新时间:2023-09-26

我第一次尝试初始化一个客户。我有一个表格,他们可以在上面注册,然后提交。在客户端,会发生以下操作:

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
    })
  }
});

似乎Stripe API不喜欢这个

未处理的拒绝错误:你不能使用一个条带令牌超过一次

是否有一种规范的方式来使多个请求在服务器上条带一个令牌?

似乎您遇到了这个问题,因为您无意中试图重用令牌来为客户创建新卡,而您不知道,您已经使用该令牌为该用户创建了该卡。使用已存储的卡片创建客户实际上比您预期的要容易得多:当您使用令牌初始化客户对象时,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。

让我知道这是否解决了你的问题!

相关文章: