如何使用条带webhook更新用户的订阅日期?

时间:2015-10-24 05:36:21

标签: node.js mongoose stripe-payments webhooks

我正在node.js中构建订阅计划,我阅读了有关如何订阅用户计划的文档,并且成功了。

Stripe的doc声明我必须在数据库中存储active_until字段。它说当使用webhook进行更改时,我知道webhook就像是一个事件。

真正的问题是

1)如何使用active_until每个月重复一次账单? 2)我如何使用webhook,我真的不明白。

到目前为止,这是代码。     var User = new mongoose.Schema({          电子邮件:String,          条纹:{            customerId:String,            计划:字符串          }

});

//payment route
router.post('/billing/:plan_name', function(req, res, next) {
  var plan = req.params.plan_name;
  var stripeToken = req.body.stripeToken;
  console.log(stripeToken);

  if (!stripeToken) {
    req.flash('errors', { msg: 'Please provide a valid card.' });
    return res.redirect('/awesome');
  }

  User.findById({ _id: req.user._id}, function(err, user) {
    if (err) return next(err);

    stripe.customers.create({
      source: stripeToken, // obtained with Stripe.js
      plan: plan,
      email: user.email
    }).then(function(customer) {
      user.stripe.plan = customer.plan;
      user.stripe.customerId = customer.id;
      console.log(customer);
      user.save(function(err) {
        console.log("Success");
        if (err) return next(err);
        return next(null);
      });
    }).catch(function(err) {
      // Deal with an error
    });

    return res.redirect('/');

  });
});

如何实施active_until时间戳和webhook事件?

2 个答案:

答案 0 :(得分:2)

您不需要每个月重复该法案。 Stripe会为你做的。 一旦您将用户订阅了计划,条带将向他收取费用,直到付费期结束。

每次条带向客户收费时,它都会生成一个webhook,即服务器上对某个指定URL的请求。 Stripe可以出于不同的原因生成不同的webhook。

例如,当客户通过订阅收费时,Stripe会向您发送有关付款的信息。

router.post('/billing/catch_paid_invoice', function(req, res) {
    // Here you parse JSON data from Stripe
}):

我现在无法访问Stripe设置,但请记住手动设置webhooks的网址。 选择您的帐户名称>帐户设置>网络挂接

active_until仅提醒您客户仍处于有效状态,并已在您的系统中获得付费服务。在获取webhook时需要更新它。 条纹文档非常好,所以再次浏览它们。 https://stripe.com/docs/guides/subscriptions

答案 1 :(得分:2)

active_until只是您可以在users表上创建的数据库列的名称,用于存储表示用户帐户何时到期的时间戳。列的名称无关紧要。您可以使用任何您想要的名称。

为了验证用户的订阅是否是最新的,Stripe建议你使用这样的逻辑:

If today's date <= user.active_until
  allow them access

Else
  show them an account expired message

webhook是Stripe的服务器向您的服务器发出的请求,告诉您发生了某些事情。在这种情况下,您最感兴趣的事件是invoice.payment_succeeded

您的webhook将包含以下逻辑:

if event type is "invoice.payment_succeeded"
  then update user.active_until to be equal to today's date + 1 month

如果付款失败等,您还需要回复其他事件