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.
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? –
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. –