我正在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事件?
答案 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
如果付款失败等,您还需要回复其他事件