Prerequisites
To integrate the Dodo Payments API, you’ll need:- A Dodo Payments merchant account
- API credentials (API key and webhook secret key) from the dashboard
API Integration
Checkout Sessions
Use Checkout Sessions to sell subscription products with a secure, hosted checkout. Pass your subscription product inproduct_cart and redirect customers to the returned checkout_url.
- Node.js SDK
- Python SDK
- REST API
API Response
The following is an example of the response:checkout_url.
Webhook
Quando integri gli abbonamenti, riceverai webhook per monitorare il ciclo di vita degli abbonamenti. Questi webhook ti aiutano a gestire efficacemente gli stati degli abbonamenti e gli scenari di pagamento. Per configurare il tuo endpoint webhook, segui la nostra Guida dettagliata all’integrazione.Tipi di eventi di abbonamento
I seguenti eventi webhook monitorano i cambiamenti di stato dell’abbonamento:subscription.active- L’abbonamento è stato attivato con successo.subscription.updated- L’oggetto dell’abbonamento è stato aggiornato (si attiva su qualsiasi modifica del campo).subscription.on_hold- L’abbonamento è messo in attesa a causa di un rinnovo fallito.subscription.failed- La creazione dell’abbonamento è fallita durante la creazione del mandato.subscription.renewed- L’abbonamento è rinnovato per il prossimo periodo di fatturazione.
Scenari di pagamento
Flusso di pagamento riuscito I webhook che ricevi e la loro tempistica dipendono dal fatto che il prodotto includa o meno un periodo di prova. Fatturazione immediata (0 giorni di prova):subscription.active: il mandato viene autorizzato e la sottoscrizione viene attivata.payment.succeeded: conferma il primo addebito. Attendi questo evento entro 2–10 minuti dal checkout.
- All’inizio della prova (checkout):
subscription.activeviene emesso quando il metodo di pagamento è autorizzato. Non viene ancora effettuato alcun addebito ricorrente. Il primo addebito effettivo viene posticipato fino al termine della prova. - Al termine della prova: viene addebitato l’importo ricorrente e ricevi
payment.succeededinsieme asubscription.renewed.
subscription.renewed: viene emesso a ogni ciclo di fatturazione quando il pagamento del rinnovo viene detratto, sempre insieme apayment.succeeded. Contiene anche il valore aggiornato dinext_billing_date.
Ogni volta che viene effettivamente detratto del denaro per un prodotto in sottoscrizione, ricevi
subscription.renewed e payment.succeeded. Usa subscription.renewed (anziché il solo payment.succeeded) come segnale per estendere l’accesso al ciclo successivo.- Errore della sottoscrizione
subscription.failed- La creazione della sottoscrizione non è riuscita perché non è stato possibile creare un mandato.payment.failed- Indica un pagamento non riuscito.
- Sottoscrizione sospesa
subscription.on_hold- La sottoscrizione viene sospesa a causa di un pagamento di rinnovo non riuscito o di un addebito per la modifica del piano non riuscito.- Quando una sottoscrizione viene sospesa, non si rinnoverà automaticamente finché il metodo di pagamento non verrà aggiornato.
Best Practice: per semplificare l’implementazione, ti consigliamo di monitorare principalmente gli eventi della sottoscrizione per gestirne il ciclo di vita.
subscription.failed vs. subscription.on_hold
È facile confondere questi due eventi, ma richiedono una gestione molto diversa:
Gestione delle sottoscrizioni sospese
Quando una sottoscrizione entra nello statoon_hold, devi aggiornare il metodo di pagamento per riattivarla. Questa sezione spiega quando le sottoscrizioni vengono sospese e come gestirle.
Quando le sottoscrizioni vengono sospese
Una sottoscrizione viene sospesa quando:- Il pagamento del rinnovo non riesce: l’addebito automatico del rinnovo non riesce a causa di fondi insufficienti, carta scaduta o rifiuto da parte della banca
- L’addebito per la modifica del piano non riesce: un addebito immediato durante l’upgrade o il downgrade del piano non riesce
- L’autorizzazione del metodo di pagamento non riesce: non è possibile autorizzare il metodo di pagamento per gli addebiti ricorrenti
Riattivazione delle sottoscrizioni sospese
Per riattivare una sottoscrizione nello statoon_hold, usa l’API Update Payment Method. Questa operazione automaticamente:
- Crea un addebito per gli importi ancora dovuti
- Genera una fattura per l’addebito
- Elabora il pagamento utilizzando il nuovo metodo di pagamento
- Riattiva la sottoscrizione nello stato
activedopo il pagamento effettuato correttamente
1
Handle subscription.on_hold webhook
Quando ricevi un webhook
subscription.on_hold, aggiorna lo stato dell’applicazione e informa il cliente:2
Update payment method
Quando il cliente è pronto ad aggiornare il metodo di pagamento, chiama l’API Update Payment Method:
Puoi anche usare l’ID di un metodo di pagamento esistente se il cliente ha salvato dei metodi di pagamento:
3
Monitor webhook events
Dopo aver aggiornato il metodo di pagamento, monitora questi eventi webhook:
payment.succeeded- L’addebito per gli importi ancora dovuti è riuscitosubscription.active- La sottoscrizione è stata riattivata
Esempio di payload di un evento Subscription
Modifica dei piani di sottoscrizione
Puoi effettuare l’upgrade o il downgrade di un piano di sottoscrizione utilizzando l’endpoint API change plan. Questo consente di modificare il prodotto, la quantità e di gestire la proroga della sottoscrizione.Change Plan API Reference
Per informazioni dettagliate sulla modifica dei piani di sottoscrizione, consulta la documentazione della Change Plan API.
Opzioni di proroga
Quando cambi piano di abbonamento, hai quattro opzioni per gestire l’addebito immediato:1. prorated_immediately
- Calcola l’importo pro rata in base al tempo rimanente nel ciclo di fatturazione corrente
- Addebita al cliente solo la differenza tra il piano precedente e quello nuovo
- Durante un periodo di prova, passa immediatamente l’utente al nuovo piano, addebitando subito il cliente
2. full_immediately
- Addebita al cliente l’intero importo della sottoscrizione per il nuovo piano
- Ignora il tempo rimanente o i crediti del piano precedente
- È utile quando vuoi reimpostare il ciclo di fatturazione o addebitare l’intero importo indipendentemente dalla proroga
3. difference_immediately
- In caso di upgrade, al cliente viene immediatamente addebitata la differenza tra gli importi dei due piani.
- Ad esempio, se il piano corrente costa 30 Dollari e il cliente passa a un piano da 80 Dollari, gli vengono addebitati istantaneamente $50.
- In caso di downgrade, l’importo inutilizzato del piano corrente viene aggiunto come credito interno e applicato automaticamente ai rinnovi futuri della sottoscrizione.
- Ad esempio, se il piano corrente costa 50 Dollari e il cliente passa a un piano da 20 Dollari, i $30 rimanenti vengono accreditati e utilizzati per il ciclo di fatturazione successivo.
4. do_not_bill
- Applica immediatamente la modifica del piano, ma non effettua alcun addebito al momento della modifica.
- Il piano aggiornato (e la quantità/gli extra) viene fatturato al rinnovo programmato successivo e la data di fatturazione originale viene mantenuta.
Comportamento
- Quando richiami questa API, Dodo Payments avvia immediatamente un addebito in base all’opzione di proroga selezionata
- Se la modifica del piano è un downgrade e utilizzi
prorated_immediately, i crediti vengono calcolati automaticamente e aggiunti al saldo crediti della sottoscrizione. Questi crediti sono specifici di quella sottoscrizione e verranno utilizzati solo per compensare i futuri pagamenti ricorrenti della stessa sottoscrizione - L’opzione
full_immediatelyignora i calcoli dei crediti e addebita l’intero importo del nuovo piano
Elaborazione degli addebiti
- L’addebito immediato avviato dopo la modifica del piano completa solitamente l’elaborazione in meno di 2 minuti
- Se questo addebito immediato non riesce per qualsiasi motivo, la sottoscrizione viene automaticamente sospesa finché il problema non viene risolto
Sottoscrizioni on-demand
Le sottoscrizioni on-demand ti consentono di addebitare i clienti in modo flessibile, non solo secondo una pianificazione fissa. Questa funzionalità è disponibile per tutti gli account.
on_demand nel corpo della richiesta. Questo consente di autorizzare un metodo di pagamento senza un addebito immediato oppure di impostare un prezzo iniziale personalizzato.
Per addebitare un abbonamento on-demand:
Per gli addebiti successivi, usa l’endpoint POST /subscriptions//charge e specifica l’importo da addebitare al cliente per quella transazione.
Per una guida completa e dettagliata (inclusi esempi di request/response, criteri di retry sicuri e gestione dei webhook), consulta la Guida agli abbonamenti on-demand.
Aspetti fondamentali della fatturazione degli abbonamenti
I periodi di prova prevedono un’autorizzazione di $0, non un addebito. Quando un abbonamento include un periodo di prova, l’inizio del periodo di prova crea un’autorizzazione di mandato di $0 per salvare la carta; il primo addebito effettivo avviene al termine del periodo di prova. Nell’elenco dei pagamenti, un abbonamento in prova mostra esattamente un pagamento con
amount: 0.Ciclo di vita dell’abbonamento:
on_hold = un rinnovo non riuscito (recuperabile: chiedi al cliente di aggiornare il metodo di pagamento; vengono applicati nuovi tentativi di dunning). expired = il periodo è terminato senza rinnovo e non può essere riattivato. Il cliente deve sottoscrivere nuovamente l’abbonamento. cancelled = terminato dal cliente o dall’esercente. La maggior parte dei rinnovi non riusciti è dovuta a rifiuti da parte dell’emittente (fondi insufficienti, carta rifiutata), non a un errore di Dodo.Riferimenti API correlati
Create Subscription
Riferimento API per la creazione di prodotti in abbonamento e la gestione del ciclo di vita degli abbonamenti
Change Subscription Plan
Riferimento API per l’upgrade, il downgrade o la modifica dei piani di abbonamento con opzioni di prorata
Update Payment Method
Riferimento API per l’aggiornamento dei metodi di pagamento e la riattivazione degli abbonamenti sospesi
Patch Subscription
Riferimento API per l’aggiornamento dei dettagli e della configurazione dell’abbonamento