【问题标题】:Stripe subscription not updating quantityStripe 订阅未更新数量
【发布时间】:2019-02-15 09:34:17
【问题描述】:

我有一个相当简单的应用程序,它只允许您创建一个管理员用户,该用户可以在他们的帐户下创建子用户。当管理员创建另一个用户时,我希望他们使用存储在user.company.subUserCount 的当前用户数更新他们的条带订阅。但是当我这样做时,用户模型没有使用正确的值更新,并且条带根本不会更新。

希望有人可以看看我的代码 sn-ps 看看它有什么问题导致它无法更新 Stripe。

路线

// POST USER/NEW
    app.post('/user/new', 
    isAuthenticated,
    company.postNewUserPlan,
    sessions.postSignupSub,
    (req, res) => {
        User.findById(req.user.id, function(err, user) {
            user.company.subUserCount = req.user.company.subUserCount + 1;
            user.save();
        });
    });

company.postNewUserPlan

exports.postNewUserPlan = function(req, res, next){
  var plan = req.user.company.stripe.plan;
  var coupon = null;
  var stripeToken = null;
  plan = plan.toLowerCase();

  if(req.body.stripeToken){
    stripeToken = req.body.stripeToken;
  }

  User.findById(req.user.id, function(err, user) {
    if (err) return next(err);
    var quantity = user.company.subUserCount + 1;
    user.setPlan(plan, coupon, quantity, 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('/user/create');
      }
    });
  });
  next();
};

sessions.postSignupSub 护照代码

passport.use('signup-sub', new LocalStrategy({
      usernameField: 'email',
      passReqToCallback : true
    },
    function(req, email, password, done) {
        User.findOne({ email: req.body.email }, function(err, existingUser) {
          if(err){
            console.log(err);
          }
          if (existingUser) {
            req.flash('form', {
              email: req.body.email
            });
            return done(null, false, req.flash('error', 'An account with that email address already exists.'));
          }
          var preRole = req.body.role;
          var role = ''
          if (preRole === undefined) {
            role = 'manager';
          } else if (preRole === 'on')  {
            role = 'employee';
          }
          // edit this portion to accept other properties when creating a user.
          var user = new User({
            email: req.body.email,
            password: req.body.password, // user schema pre save task hashes this password
            role: role,
            companyID: req.user.companyID,
            isVerified: true
          });

          user.save(function(err) {
            if (err) return done(err, false, req.flash('error', 'Error saving user.'));

            var time = 14 * 24 * 3600000;
            req.session.cookie.maxAge = time; //2 weeks
            req.session.cookie.expires = new Date(Date.now() + time);
            req.session.touch();
            return done(null, user, req.flash('success', `Your new ${role} has been created`));
          });
        });

    })
  );

【问题讨论】:

    标签: node.js mongodb express stripe-payments


    【解决方案1】:

    经过一番测试后,我设法解决了与 OP 中未包含的代码相关的问题,我发现订阅并未使用数量更新,而是仅使用数量创建。

    代码

    schema.methods.setPlan = function(plan, coupon, quantity, stripe_token, cb) {
        var user = this;
    
        var subscriptionHandler = function(err, subscription) {
          if(err) return cb(err);
    
          user.company.stripe.plan = plan;
          user.company.stripe.subscriptionId = subscription.id;
          user.company.subUserCount = quantity;
          user.save(function(err){
            if (err) return cb(err);
            return cb(null);
          });
        };
    
        var createSubscription = function(){
          stripe.customers.createSubscription(
            user.company.stripe.customerId,
            {plan: plan, coupon: coupon, quantity: quantity},
            subscriptionHandler
          );
        };
    
        if(stripe_token) {
          user.setCard(stripe_token, function(err){
            if (err) return cb(err);
            createSubscription();
          });
        } else {
          if (user.company.stripe.subscriptionId){
            // update subscription
            stripe.customers.updateSubscription(
              user.company.stripe.customerId,
              user.company.stripe.subscriptionId,
              { plan: plan, coupon: coupon, ***quantity: quantity*** }, <-- Part I had to change
              subscriptionHandler
            );
          } else {
            createSubscription();
          }
        }
      };
    

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2017-08-20
      • 2021-10-24
      • 2022-07-01
      • 2016-12-17
      • 1970-01-01
      • 2023-03-19
      • 2021-09-02
      • 2015-12-24
      相关资源
      最近更新 更多