2017-10-06 1 views
0

EDITProject repoKann den Plan nicht ändern | Stripe

ich ein Kesselblech bin mit und haben das Problem mit dem Schöpfer angemeldet, aber hatte gehofft, um Hilfe früher. Mein Problem ist, dass ich, wenn ich Pläne ändere, mir vorschlage, eine Karte hinzuzufügen, bevor ich einen Plan auswähle. Der Code für die Seite ist wie folgt:

Die Form:

`<form {% if !user.stripe.last4 %}id="cardForm"{% endif %} 
action="/user/plan" method="POST" class="form-horizontal"> 
    <div class="form-group"> 
    <label for="plan" class="col-sm-3 control-label">Plan</label> 
    <div class="col-sm-4"> 
     {% for plan in plans %} 
     <div class="radio"> 
      <label> 
      <input type="radio" {% if user.stripe.plan == loop.key 
%}checked{% endif %} name="plan" value="{{loop.key}}" data-toggle="radio"> 
      <span>{{plan.name}} - ${{plan.price}}</span> 
      </label> 
     </div> 
     {% endfor %} 
    </div> 
    </div> 
    {% if !user.stripe.last4 %} 
    <div id="cardWrapper"> 
    <div class="form-group"> 
     <label class="col-sm-3 control-label">Test Card Info</label> 
     <div class="col-sm-7"> 
     <div class="form-control-static">4242424242424242, 11/19, 123 - <a 
href="https://stripe.com/docs/testing">additional test info</a></div> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label class="col-sm-3 control-label">Card Number</label> 
     <div class="col-sm-4"> 
     <input id="card-num" type="text" class="form-control"> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label class="col-sm-3 control-label">Card Details</label> 
     <div class="col-sm-4"> 
     <div class="row"> 
      <div class="col-xs-4"> 
      <input id="card-month" type="text" size="2" maxlength="2" 
class="form-control" placeholder="MM"> 
      </div> 
      <div class="col-xs-4"> 
      <input id="card-year" type="text" size="2" maxlength="2" 
class="form-control" placeholder="YY"> 
      </div> 
      <div class="col-xs-4"> 
      <input id="card-cvc" type="text" size="3" maxlength="3" 
class="form-control" placeholder="CVC"> 
      </div> 
     </div> 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-sm-6"> 
     <div id="cardFormError" class="alert alert-danger hidden" 
role="alert"> 
      <p>{{error}}</p> 
     </div> 
     </div> 
    </div> 
    </div> 
    {% endif %} 
    <div class="form-group"> 
    <div class="col-sm-offset-3 col-sm-4"> 
     <button type="submit" class="btn btn-primary">Update Plan</button> 
    </div> 
    </div> 
</form>` 

fordert die Route/user/Plan

app.post('/user/plan', 
    setRedirect({auth: '/', success: '/billing', failure: '/billing'}), 
    isAuthenticated, 
    users.postPlan); 

users.postPlan ist die Frage, die ich denke:

exports.postPlan = function(req, res, next){ 
    var plan = req.body.plan; 
    var stripeToken = null; 

    if(plan){ 
    plan = plan.toLowerCase(); 
    } 

    if(req.user.stripe.plan == plan){ 
    req.flash('info', {msg: 'The selected plan is the same as the current plan.'}); 
    return res.redirect(req.redirect.success); 
    } 

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

    if(!req.user.stripe.last4 && !req.body.stripeToken){ 
    req.flash('errors', {msg: 'Please add a card to your account before choosing a plan.'}); 
    return res.redirect(req.redirect.failure); 
    } 

    User.findById(req.user.id, function(err, user) { 
    if (err) return next(err); 

    user.setPlan(plan, 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: msg}); 
     return res.redirect(req.redirect.failure); 
     } 
     req.flash('success', { msg: 'Plan has been updated.' }); 
     res.redirect(req.redirect.success); 
    }); 
    }); 
}; 

Dies ist der Code, den ich denke, dass irgendwo durcheinander ist. Wenn es mehr zu geben scheint, kann ich mich einschreiben lassen. Ich bin mir nicht sicher, in welchem ​​Bereich des Codes das Problem liegt, aber ich denke, es ist der users.postPlan, aber ich weiß nicht genug über Knoten, um es zu erzählen.

+0

Ich kann im letzten Block des Codes sehen, dass der Fehler von der Zeile 'if (! Req.user.stripe.last4 &&! Req.body.stripeToken)' kommt, aber wie überprüfe ich, um sicherzustellen, dass es ist arbeiten und wo es versagt? –

+0

Ich habe console.log mit den zwei Daten in der if-Anweisung versucht. Ich habe auch versucht, eine Zeichenfolge console.log und keine ausgedruckt. Es scheint, als würde der if nicht den ganzen Code ausführen. –

Antwort

0

Ich wäre versucht zu bestätigen, dass user.stripe.last4 etwas darin hat; Das scheint der Grund dafür zu sein, dass Sie zum Kartenformular weitergeleitet werden.

+0

Routing mir zum Kartenformular? Das Formular ist das Formular, um den Plan auszuwählen und dann die Kartendaten einzugeben. Es sollte zum Formular wechseln und dann nach dem Planwechsel auf das Formular wechseln (welches/abrechnen ist), um die Änderung erneut anzuzeigen. –

Verwandte Themen