KamoCRM

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?

Tutto questo arriva nel vostro spazio di lavoro da solo. Iniziare sul piano gratuito e leggere di nuovo questa pagina in un mese.

Inizia gratis per sempreVisualizza il prezzo