Полоса не обновляет план клиента - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть код, который работал в предыдущем проекте, но теперь не будет работать даже после его модификации. Идея кода в том, чтобы быть функцией пользовательской модели, которую я могу вызывать из любого места. Эта часть работает. Часть, которая не работает, устанавливает план, как только он уже был установлен. Так что начальная настройка пользователя в порядке.

Этот код предназначен для принятия плана, выбранного пользователем, и последующего присвоения этого плана клиенту с полосой. Он также проверяет, выбирает ли пользователь определенный тариф, который предназначен для бесплатного использования, то есть ему не нужно вводить данные своей кредитной карты.

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();
      }
    }
  };

Предложения о том, что попробовать или что может быть не так?

...