PassportJS和Stripe

时间:2017-05-04 16:13:21

标签: node.js mongodb express passport.js stripe-payments

我试图在用户创建帐户时向其收取费用。一切都已设置完毕,并且之前的代码完美无缺。当用户签署网站的“高级”部分时,他们会创建一个帐户,并从下面的代码中收取费用。

问题:如果用户的信用卡因各种原因而被拒绝...他们的用户帐户仍然是STILL创建的。如果信用卡失败,我如何更改下面的代码以达不到代码的那部分?

注意:此功能适用于用户尝试使用用户名创建帐户的时间。 Web应用程序将它们重定向到/ buy以选择新用户名。但是,它无法处理信用卡错误,因为首先创建了用户。

感谢您的帮助!

user.save(function(err) {
        console.log('this is the problem' + ' ' + err)
        if(err){
        return res.redirect('/buy')
        }
        var token = req.body.stripeToken; // Using Express
        var charge = stripe.charges.create({
        amount: 749,
        currency: "usd",
        description: "Website.com Premium - One time Payment",
        source: token,

        }, function(err, charge) {
            if(err) {
              console.log(err);
              return res.redirect('/buy')
            }
            console.log('charged')
            req.logIn(user, function(err) {
              if(err) {
                console.log(err);
              }
              console.log('all looks good')
              res.redirect('/results');
            });
        });
      });
    });

1 个答案:

答案 0 :(得分:1)

问题是您在将用户保存到数据库后处理付款。有两种方法可以解决这个问题。如果付款失败,您可以从数据库中删除该用户。或者您可以处理付款然后将用户保存到数据库。所以基本上切换顺序以及哪些回调嵌套在哪些回调中。

我个人建议使用第二种解决方案,因为您将减少对数据库的调用,这将减轻数据库的压力和负担。

这是如何实现这一目标的基本示例。我不知道你的代码的所有内容,所以你可能需要做一些调整以适应你的工作方式,但基本的想法就是那里。

var token = req.body.stripeToken; // Using Express
var charge = stripe.charges.create({
    amount: 749,
    currency: "usd",
    description: "Website.com Premium - One time Payment",
    source: token,

}, function(err, charge) {
    if (err) {
        console.log(err);
        return res.redirect('/buy')
    }
    console.log('charged')
    user.save(function(err) {
        console.log('this is the problem' + ' ' + err);
        if (err) {
            return res.redirect('/buy')
        }
        req.logIn(user, function(err) {
            if (err) {
                console.log(err);
            }
            console.log('all looks good')
            res.redirect('/results');
        });
    });
});

所以你基本上是在创建条带费用,如果成功,那么你就可以在数据库中创建用户了。

希望这有帮助!