【问题标题】:How to create both a customer and a card in a single action with Stripe?如何使用 Stripe 在一个操作中同时创建客户和卡片?
【发布时间】:2015-07-31 19:34: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 令牌

是否有规范的方法可以发出多个请求以在服务器上对单个令牌进行条带化?

【问题讨论】:

  • 看起来您正在传递整个令牌字典,但我认为您应该只在创建客户时传递令牌ID。

标签: javascript node.js mongodb stripe-payments


【解决方案1】:

您似乎遇到了这个问题,因为您不小心尝试重复使用令牌来为客户创建新卡,而您不知道的是,您已经使用该令牌为其创建了该卡用户。使用存储卡创建客户实际上比您预期的要容易得多:当您使用令牌初始化客户对象时,Stripe API 会继续存储该卡与新客户相关联。也就是说,您可以在创建后立即向您的客户收费:

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

如需了解更多信息,我推荐 https://support.stripe.com/questions/can-i-save-a-card-and-charge-it-laterhttps://stripe.com/docs/api/node#create_customer 上的 Stripe 文档。

如果这能解决您的问题,请告诉我!

【讨论】:

  • 不知道它会自动向用户添加卡片,这比我想象的要容易得多。将客户对象保存在仅服务器端的集合中是否安全?
  • 是的,以任何您喜欢的方式存储从 API 返回的任何内容都是完全安全的。如果不访问您的帐户私有 API 密钥,攻击者实际上无法对 Stripe 客户甚至卡 ID 进行任何操作。
猜你喜欢
  • 2021-01-31
  • 2015-12-19
  • 2014-03-08
  • 2014-03-30
  • 2016-05-06
  • 1970-01-01
  • 2016-09-11
  • 2020-08-14
  • 2015-12-26
相关资源
最近更新 更多