Nous avons lancé un remboursement sur notre propre compte pour vérifier que le grand livre s'inversait correctement. C'était le cas. Puis quelqu'un a lu le reste de l'état du compte, et c'est là que se trouvait la vraie découverte : le plan était toujours actif, et le resterait jusqu'à la moitié du mois suivant.
Argent rendu, accès conservé. Répétable chaque mois par quiconque est prêt à cliquer sur Rembourser. Ce n'est pas un test qui l'a trouvé, parce qu'aucun test ne posait cette question.
Mettre fin à la période que le paiement a achetée
En cas de remboursement total, la période que ce paiement a ouverte se termine désormais immédiatement, et un événement de cycle de vie enregistre pourquoi.
Immédiatement — mais pas vers le néant. Si tu étais sur un plan, que tu es passé à un plan plus cher, et que le paiement de mise à niveau est remboursé, tu reviens au plan sur lequel tu étais, pas au palier gratuit. Tu as payé ce mois-là séparément, et il n'a pas été remboursé. Le reprendre aussi reviendrait à ce que la plateforme se serve d'un mois que le client possède encore. Seule une personne sans plan antérieur encore actif retombe sur le gratuit.
Le droit d'accès a deux moitiés
La première version de cette correction terminait la ligne d'abonnement et s'arrêtait là. Mais ce à quoi tu as droit dépend de deux choses : la ligne que le budget lit, et un rôle accordé quand le paiement a réussi. Tout autre chemin qui termine un abonnement retire ce rôle explicitement. Celui-ci ne le faisait pas, donc un compte remboursé aurait été annulé sur le papier tout en conservant les permissions du palier payant.
Le rôle est désormais retiré aussi, et il atterrit sur le palier du plan restauré, pas sur un « gratuit » général — le même raisonnement que la restauration elle-même.
Prévenir le fournisseur
La page du compte disait Palier Gratuit. Le tableau de bord du fournisseur de paiement disait Actif, prochaine facturation le mois suivant. Le remboursement avait terminé les choses de notre côté et n'avait jamais prévenu l'autre côté, donc le client était en file pour être facturé à nouveau pour un plan pour lequel il avait été remboursé et qu'il ne pouvait plus utiliser — et n'avait aucun moyen de l'arrêter depuis nos écrans, car annuler exige un abonnement actif, et nous venions d'annuler le sien.
Un remboursement arrête désormais le renouvellement automatique chez le fournisseur qui a émis le paiement. Pas une résiliation immédiate : le renouvellement automatique s'arrête, donc plus aucun argent ne bouge, et l'enregistrement propre du fournisseur s'éteint selon son propre calendrier plutôt que d'être arraché sous un remboursement qu'il vient de traiter.
Avec une exception, que le propriétaire a repérée avant l'envoi. Si le plan sur lequel tu as été restauré roule sur le même abonnement fournisseur, l'annuler te laisserait avec un plan qui ne se renouvelle jamais et ne facture jamais — l'image miroir exacte du bug que ceci existe pour corriger, et tout aussi silencieuse. Ce cas est désormais nommé explicitement et laissé intact.
Seul le paiement qui a ouvert la période peut y mettre fin
Une mise à niveau en cours de mois facture, chez ce fournisseur, une petite différence au prorata sur la ligne existante. Rembourser cette petite charge aurait trouvé un abonnement, tout annulé, cherché un plan antérieur, n'en aurait trouvé aucun, et aurait fait retomber le client sur le gratuit — pour un ajustement de mi-mois. Désormais, seul le paiement qui a ouvert la période en cours peut y mettre fin. Tout ce qui vient après est une question d'argent, et le grand livre y a déjà répondu.
Les quatre voies, pas seulement celle qui est active
Trois des quatre processeurs de paiement que nous supportons n'ont personne dessus aujourd'hui. La révocation aurait pu être corrigée seulement sur celle qui est active, et ça a bien failli être le cas. L'objection qui a changé ça : le jour où l'une des autres sera réactivée, le trou revient, et d'ici là, plus personne ne se souviendra qu'il ait jamais été là.
Ce dépôt a livré la même catégorie de piège oublié six fois. La révocation vit désormais derrière un seul contrat que les quatre processeurs appellent en une seule ligne — de sorte qu'un futur mainteneur réactivant l'un d'eux l'obtient sans avoir besoin d'avoir lu quoi que ce soit de tout cela.