Change plan subscription to require a new credit card
Fixes Issue #101 We change the Stripe plan subscription code to require a new credit card to be entered every time a user moves from the open source plan to a paid plan. When a customer's credit card fails, Stripe auto-desubscribes the user from an active plan, but (before this change) we would try to resubscribe with the invalid card.
This commit is contained in:
parent
eefecd80ff
commit
36cd79c2c0
1 changed files with 15 additions and 1 deletions
|
@ -206,11 +206,25 @@ function(KeyService, UserService, CookieService, ApiService, Features, Config) {
|
||||||
callbacks['started']();
|
callbacks['started']();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
planService.getSubscription(orgname, function(sub) {
|
||||||
|
planService.getPlanIncludingDeprecated(sub.plan, function(subscribedPlan) {
|
||||||
|
planService.changePlanInternal($scope, orgname, planId, callbacks, opt_async,
|
||||||
|
subscribedPlan.price > 0);
|
||||||
|
});
|
||||||
|
}, function() {
|
||||||
|
planService.changePlanInternal($scope, orgname, planId, callbacks, opt_async, false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
planService.changePlanInternal = function($scope, orgname, planId, callbacks, opt_async,
|
||||||
|
opt_reuseCard) {
|
||||||
|
if (!Features.BILLING) { return; }
|
||||||
|
|
||||||
planService.getPlan(planId, function(plan) {
|
planService.getPlan(planId, function(plan) {
|
||||||
if (orgname && !planService.isOrgCompatible(plan)) { return; }
|
if (orgname && !planService.isOrgCompatible(plan)) { return; }
|
||||||
|
|
||||||
planService.getCardInfo(orgname, function(cardInfo) {
|
planService.getCardInfo(orgname, function(cardInfo) {
|
||||||
if (plan.price > 0 && (previousSubscribeFailure || !cardInfo.last4)) {
|
if (plan.price > 0 && (previousSubscribeFailure || !cardInfo.last4 || !opt_reuseCard)) {
|
||||||
var title = cardInfo.last4 ? 'Subscribe' : 'Start Trial ({{amount}} plan)';
|
var title = cardInfo.last4 ? 'Subscribe' : 'Start Trial ({{amount}} plan)';
|
||||||
planService.showSubscribeDialog($scope, orgname, planId, callbacks, title, /* async */true);
|
planService.showSubscribeDialog($scope, orgname, planId, callbacks, title, /* async */true);
|
||||||
return;
|
return;
|
||||||
|
|
Reference in a new issue