我有一些在以前的项目中可用的代码,但是即使对其进行了修改,现在也无法使用。代码的想法是要成为我可以从任何地方调用的用户模型上的函数。那部分起作用。一旦设置了计划,则无效的部分将设置计划。因此,用户的初始设置很好。
此代码用于接收用户选择的计划,然后将该计划分配给分条客户。它还会检查用户是否选择了免费的特定计划,这意味着他们不必输入信用卡信息。
postPlan
exports.postPlan = function(req, res, next){
var plan = req.body.plan;
var coupon = req.body.coupon;
if (coupon) {
req.user.isUsedCoupon = true;
}
var stripeToken = null;
if(plan){
plan = plan.toLowerCase();
}
if(req.user.stripe.plan == plan){
req.flash('info', 'The selected plan is the same as the current plan.');
return res.redirect('/company/settings');
}
if(req.body.stripeToken){
stripeToken = req.body.stripeToken;
}
if(plan != 'silver'){
if(!req.user.stripe.last4 && !req.body.stripeToken){
req.flash('errors', 'Please add a card to your account before choosing a plan.');
return res.redirect('/company/settings');
}
}
User.findById(req.user.id, function(err, user) {
if (err) return next(err);
user.setPlan(plan, coupon, stripeToken, function (err) {
var msg;
if (err) {
if(err.code && err.code == 'card_declined'){
msg = 'Your card was declined. Please provide a valid card.';
} else if(err && err.message) {
msg = err.message;
} else {
msg = 'An unexpected error occurred.';
}
req.flash('errors', msg);
return res.redirect('/company/billing');
}
req.flash('success', 'Plan has been updated.');
res.redirect('/company/billing');
console.log(user.stripe.plan)
});
});
};
此代码将计划和订阅数据设置为用户个人资料/模型。如果用户当前没有计划,它将创建一个订阅并设置计划。这部分工作...如果用户已经有预订和计划,则它应该更新用户配置文件以及带区上的用户计划。这是根本不起作用的部分。
setPlan
schema.methods.setPlan = function(plan, coupon, stripe_token, cb) {
var user = this;
var subscriptionHandler = function(err, subscription) {
if(err) return cb(err);
user.stripe.plan = plan;
user.stripe.subscriptionId = subscription.id;
user.save(function(err){
if (err) return cb(err);
return cb(null);
});
};
var createSubscription = function(){
stripe.customers.createSubscription(
user.stripe.customerId,
{plan: plan, coupon: coupon},
subscriptionHandler
);
};
if(stripe_token) {
user.setCard(stripe_token, function(err){
if (err) return cb(err);
createSubscription();
});
} else {
if (user.stripe.subscriptionId){
// update subscription
stripe.customers.updateSubscription(
user.stripe.customerId,
user.stripe.subscriptionId,
{ plan: plan, coupon: coupon },
subscriptionHandler
);
} else {
createSubscription();
}
}
};
关于尝试什么或可能出错的建议?