Carica quello che il catalogo dice, una volta, per la giusta quantità

FixBillingService
Spegnimento
10 agosto 2026 alle ore 23:54 UTC
Autore
Kamo
Impegno
c54414c

Cinque difetti che hanno spostato tutti i soldi reali, più l'IDOR sub-resource sotto di loro. Cicli di fatturazione. I prezzi ANNUAL sono stati spediti a Stripe al tasso mensile memorizzato su un intervallo YEAR, quindi un piano seme come "$28/mo annuale" fatturato $28 una volta all'anno — un 12x sotto carico. QUARTERLY e SEMI ANNUAL mappati ad un intervallo di MONTH e mai set intervallo count, nonostante un commento che rivendica altrimenti, fatturando il pieno periodo ogni mese. BillingCycles ora possiede la conversione e i documenti le due convenzioni di prezzo la base di codice ha veramente: AbbonamentoPlanPrezzo Ha un tasso al mese, un totale. Modello di prezzo. Ogni componente aggiuntivo è stato fatturato in quantità = posti indipendentemente dalla sua pricingModel, così il org-wide storage add-on costo 25x su un org 25-seat, e perché Stripe rifiuta una quantità su un prezzo misurato, compreso ha fatto intero abbonamento creare lancio. Quantità ora segue il modello: sedili per PER SEAT, 1 per FLAT, assente per USAGE BASED, saltato per ONE TIME. Cambiamenti di piano. I messaggi della console creano() per "Change Plan"; creare() chiamato Abbonamento.creare incondizionatamente e overrote il id memorizzato, lasciando il precedente abbonamento Stripe live e non registrato — fatturato due volte, per sempre. Si'. Ora modifica l'abbonamento esistente quando ce n'è uno. aggiornamento() acquisito il piano cambiamento era stato silenziosamente scartando, e riconcilia ogni elemento linea piuttosto che aveva lasciato quantità aggiuntive congelate a qualunque posto il conteggio era il giorno in cui l'abbonamento ha aperto. Aggiornamento() ha scritto addonCodes direttamente dal corpo della richiesta, l'esatto foro auto-grant creare() è stato indurito contro: un chiamante GRATUITA potrebbe inviare {"addonCodes":["MLOS"]} e autorizzare l'app ipoteca, non fatturato. Entrambi i percorsi ora attraversano la soluzioneAddonCodes. Sedili. assegna() ha chiesto solo se esisteva una riga UNASSIGNED, e le righe erano mai distrutto quando il numero del sedile si è ridotto, quindi un org che ha tagliato 10 posti a 3 Potrebbe riassegnare tutti e dieci. Ora controlla la capacità sia del fresco che del ramo di riattivazione, si rifiuta di emettere posti su un abbonamento interrottato, e garantireSeatRows recupera slot di ricambio. Abbonamento a strisce annullato o non pagato ora lapses le sue licenze — il webhook ha scritto lo stato e si è fermato, così i membri a tempo indeterminato. Autorizzazione. Provare la proprietà di {accountUid} è stato l'intero controllo; gestori poi abbonamenti e licenze caricati dal proprio id e mai confrontato, quindi accoppiare il proprio account id con un UUID straniero ha cancellato il pagamento di qualcun altro abbonamento o revocato il suo posto. Bound centralmente nell'intercettore così percorsi aggiunto in seguito sono coperti di default. Aggiunge i primi test sulla conversione dei prezzi, che non aveva.

Tutte le modifiche

Come quello che vedi la spedizione?

Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.

Inizia gratis per sempreVisualizza il prezzo