Panoramica
L’API di Dodo Payments utilizza codici di stato HTTP standard e codici di errore personalizzati per indicare il successo o il fallimento delle richieste API. Quando si verifica un errore, l’API restituisce un codice di stato HTTP appropriato e una risposta JSON contenente informazioni dettagliate sull’errore. Ogni risposta di errore include:- Un codice di stato HTTP che indica la categoria generale dell’errore
- Un codice di errore specifico che identifica la natura esatta dell’errore
- Un messaggio di errore leggibile dall’uomo che spiega cosa è andato storto
- Dettagli aggiuntivi sull’errore quando applicabile
- Risolvere problemi di integrazione
- Implementare una corretta gestione degli errori nella tua applicazione
- Fornire feedback significativi agli utenti finali
- Mantenere un sistema di elaborazione dei pagamenti robusto
Codici di Errore API Standard
| Codice di errore | Stato HTTP | Descrizione |
|---|---|---|
| 400 | Richiesta non valida | La richiesta era malformata o conteneva parametri non validi |
| 401 | Non autorizzato | L’autenticazione è fallita o la chiave API non è valida |
| 403 | Vietato | La chiave API non ha il permesso di accedere alla risorsa richiesta |
| 404 | Non trovato | La risorsa richiesta non esiste |
| 405 | Metodo non consentito | Il metodo HTTP non è supportato per questo endpoint |
| 409 | Conflitto | La richiesta è in conflitto con lo stato attuale della risorsa |
| 422 | Entità non elaborabile | La richiesta era ben formata ma conteneva errori semantici |
| 429 | Troppe richieste | Limite di frequenza superato |
| 500 | Errore interno del server | Si è verificato un errore imprevisto sui nostri server |
| 502 | Bad Gateway | Il server ha ricevuto una risposta non valida da un server a monte |
| 503 | Servizio non disponibile | Il servizio è temporaneamente non disponibile |
| 504 | Timeout del gateway | Il server ha superato il tempo di attesa per una risposta a monte |
Formato della Risposta di Errore
Quando si verifica un errore, l’API restituisce una risposta JSON con la seguente struttura:Riferimento ai Codici di Errore
-
ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT- Trigger: Attivazioni della chiave di licenza: nuovo limite < numero di istanze esistente
- Message: Il nuovo limite di attivazioni non può essere inferiore al numero di istanze corrente
-
ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED- Trigger: Tentativo di aggiungere componenti aggiuntivi a sottoscrizioni con fatturazione basata sull’utilizzo
- Message: I componenti aggiuntivi nelle sottoscrizioni non sono supportati per la fatturazione basata sull’utilizzo
-
ADDONS_NOT_ALLOWED_FOR_ON_DEMAND- Trigger: Tentativo di aggiungere componenti aggiuntivi a sottoscrizioni on demand
- Message: I componenti aggiuntivi non sono consentiti per le sottoscrizioni on demand
-
BRAND_MISMATCH- Trigger: Gli articoli del carrello appartengono a marchi diversi
- Message: Tutti gli articoli nel carrello devono appartenere allo stesso marchio
-
BRAND_NOT_ENABLED- Trigger: Il marchio è disabilitato o non attivo
- Message: Il marchio fornito non è abilitato
-
BRAND_SUBMISSION_NOT_ENABLED- Trigger: Funzione di reinvio della verifica del marchio non abilitata
- Message: Il reinvio della verifica del marchio non è abilitato
-
CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Trigger: Tentativo di addebitare una sottoscrizione programmata per la cancellazione
- Message: Sottoscrizione programmata per la cancellazione
-
CHECKOUT_SESSION_CONSUMED- Trigger: La sessione di checkout ha già generato un pagamento
- Message: La sessione di checkout è già stata utilizzata
-
DISCOUNT_CODE_ALREADY_EXISTS- Trigger: Creazione di codice sconto duplicato
- Message: Il codice sconto esiste già
-
DISCOUNT_CODE_EXPIRED- Trigger: Il codice sconto ha superato la data
expires_at - Message: Il codice sconto è scaduto
- Trigger: Il codice sconto ha superato la data
-
DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED- Trigger: Il codice sconto è stato riutilizzato dopo che
usage_limitè stato raggiunto - Message: Il limite di utilizzo non può essere inferiore a times_used / Il codice sconto ha raggiunto il limite di utilizzo
- Trigger: Il codice sconto è stato riutilizzato dopo che
-
DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND- Trigger: Codice applicato a una sottoscrizione on demand
- Message: Il coupon sconto non è disponibile per le sottoscrizioni on demand
-
DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT- Trigger: Codice applicato a prodotto/i non correlati
- Message: Il coupon sconto non è disponibile per questo prodotto
-
DUPLICATE_LINE_ITEMS_IN_REQUEST- Trigger: Lo stesso
item_idappare due volte initems[] - Message: Sono stati specificati item_id duplicati nell’array items
- Trigger: Lo stesso
-
DUPLICATE_METER_IDS_IN_REQUEST- Trigger: Lo stesso meter ID appare più volte nella richiesta
- Message: Non sono consentiti ID contatore duplicati
-
EXCHANGE_RATE_NOT_FOUND- Trigger: Nessun tasso di cambio per la coppia di valute
from → to - Message: Impossibile trovare il tasso di cambio per convertire da Currency a Currency
- Trigger: Nessun tasso di cambio per la coppia di valute
-
EXISTING_REFUND_REQUEST_PROCESSING- Trigger: La precedente richiesta di rimborso è ancora in elaborazione
- Message: Una richiesta di rimborso con stato “Pending” è ancora in elaborazione
-
INACTIVE_LICENSE_KEY- Trigger: Lo stato della chiave ≠
ACTIVE - Message: La chiave di licenza non è attiva
- Trigger: Lo stato della chiave ≠
-
INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED- Trigger: Cambio piano su sottoscrizione inattiva
- Message: Il cambio piano non è supportato per sottoscrizioni inattive
-
INSUFFICIENT_WALLET_FUNDS- Trigger: Il saldo del wallet è inferiore all’importo da addebitare
- Message: Fondi insufficienti nel wallet
-
INTEGER_CONVERSION_FAILURE- Trigger: Qualsiasi conversione intero ↔ stringa/decimale che fallisce lato server
- Message: Errore di conversione dell’intero
-
INTERNAL_SERVER_ERROR- Trigger: Eccezioni non gestite; dovresti registrare i dettagli lato server
- Message: Nessun messaggio pubblico (errore 500 generico)
-
INVALID_DISCOUNT_CODE- Trigger: Il codice non esiste / non è applicabile
- Message: Codice sconto non valido / Il codice sconto non può essere applicato a nessun prodotto nel carrello
-
INVALID_PERCENTAGE- Trigger: Importo percentuale > 100% (o 10.000 punti base)
- Message: L’importo percentuale non può superare 10000 / L’importo del codice sconto non può superare il 100%
-
INVALID_QUANTITY- Trigger: Quantità non valida specificata per il pricing basato sull’utilizzo
- Message: È consentita solo una quantità per i prodotti con prezzo basato sull’utilizzo
-
INVALID_QUERY_PARAMS- Trigger: Parametri di query mutuamente esclusivi / malformati
- Message: I parametri di query devono contenere solo time_frame oppure (start, end)
-
INVALID_REQUEST_BODY- Trigger: JSON malformato o violazione dello schema
- Message: Il corpo della richiesta non è valido. Controlla le intestazioni e l’oggetto della richiesta.
-
INVALID_REQUEST_PARAMETERS- Trigger: Semantica errata (es. data nel passato)
- Message: Impossibile impostare next_billing_date in un momento passato
-
INVALID_SUGGESTED_PRICE- Trigger: Il prezzo PWYW è inferiore al prezzo minimo consentito
- Message: Il prezzo suggerito non può essere inferiore al prezzo minimo. Nel caso di pay what you want, il prezzo è considerato come importo minimo accettato
-
INVALID_TAX_ID- Trigger: La validazione di VAT/GST/TIN è fallita
- Message: L’ID fiscale non è valido
-
LICENSE_KEY_LIMIT_REACHED- Trigger: Attivazioni = limite
- Message: È stato raggiunto il limite di attivazioni della chiave di licenza
-
LICENSE_KEY_NOT_FOUND- Trigger: ID istanza o ID chiave non valido
- Message: Istanza della chiave di licenza non trovata o non appartiene a questa chiave
-
LINE_ITEM_FULLY_REFUNDED- Trigger: Tentativo di rimborsare una voce già completamente rimborsata
- Message: La voce è già stata completamente rimborsata e non può essere rimborsata ulteriormente.
-
LINE_ITEM_NOT_FOUND- Trigger: L’ID dell’articolo non fa parte del pagamento indicato
- Message: La voce non è stata trovata nel pagamento
-
LINE_ITEM_PRORATED- Trigger: Tentativo di rimborso o aggiornamento su una voce proporzionata
- Message: La voce non può essere rimborsata perché è proporzionata
-
LINE_ITEM_REFUND_AMOUNT_TOO_HIGH- Trigger: L’importo del rimborso è superiore all’importo pagato (incluse tasse)
- Message: La voce ha richiesto un rimborso di incluse tasse, superiore all’importo pagato
-
LINE_ITEM_REFUND_AMOUNT_TOO_LOW- Trigger: L’importo del rimborso è inferiore alla soglia minima
- Message: La voce ha richiesto un rimborso di che è troppo basso
-
MAXIMUM_KEYS_REACHED- Trigger: I metadata / campi personalizzati hanno superato 50 coppie
- Message: Supera le 50 coppie chiave-valore
-
MERCHANT_NOT_LIVE- Trigger: L’azienda è ancora in modalità di test/sandbox
- Message: Il commerciante non è attivo
-
METER_IS_DELETED- Trigger: Tentativo di utilizzare un contatore eliminato
- Message: Il contatore è già stato eliminato
-
MISSING_ADDON_IDS- Trigger: La lista
addon_idè vuota o contiene ID sconosciuti - Message: Uno o più ID prodotto non esistono:
- Trigger: La lista
-
MISSING_METER_IDS- Trigger: L’elenco degli ID contatore è vuoto o contiene ID non validi
- Message: Uno o più ID contatore non esistono:
-
MISSING_PRODUCT_INFORMATION- Trigger: Il prodotto esiste ma mancano informazioni obbligatorie
- Message: Il prodotto esiste ma altre informazioni obbligatorie sono mancanti o non valide
-
NEGATIVE_BALANCE_ADJUSTMENT- Trigger: Tentativo di rendere negativo il saldo del wallet
- Message: Non è consentito rendere negativo il saldo del wallet
-
NO_ELIGIBLE_PAYMENT_METHODS- Trigger: Dopo il filtraggio, non rimane nulla
- Message: Nessun metodo di pagamento idoneo trovato
-
NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS- Trigger: Tentativo di impostare una data di scadenza su una chiave basata su sottoscrizione
- Message: Non è possibile impostare una data di scadenza per una chiave di licenza basata su sottoscrizione
-
NOT_FOUND- Trigger: 404 generico per qualsiasi risorsa mancante
- Message: Voce non trovata (o più specifica)
-
ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED- Trigger: Il cambio piano non è consentito per on-demand
- Message: Il cambio piano non è supportato per le sottoscrizioni on demand
-
ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED- Trigger: L’azienda ha la feature flag disattivata
- Message: Le sottoscrizioni on demand non sono abilitate per questa azienda
-
ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED- Trigger: Tentativo di usare on-demand con fatturazione basata sull’utilizzo
- Message: Le sottoscrizioni on demand non sono supportate per la fatturazione basata sull’utilizzo
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Trigger: Mancanza del prezzo per un prodotto PWYW
- Message: L’importo è obbligatorio per un prodotto pay as you want
-
PAYMENT_ALREADY_REFUNDED- Trigger: Rimborso duplicato
- Message: Questo pagamento è già stato rimborsato
-
PAYMENT_HAS_BEEN_REFUNDED- Trigger: Il pagamento è stato completamente rimborsato
- Message: L’ID pagamento è stato completamente rimborsato.
-
PAYMENT_NOT_SUCCEEDED- Trigger: Tentativo di rimborsare/elaborare un pagamento non riuscito
- Message: Il pagamento fornito non è stato completato con successo
-
PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Trigger: Tentativo di cambio piano su una sottoscrizione programmata per la cancellazione
- Message: Sottoscrizione programmata per la cancellazione
-
PREVIOUS_PAYMENT_PENDING- Trigger: Tentativo di creare un addebito mentre il precedente è in uno stato non terminale
- Message: Impossibile creare un nuovo addebito poiché il pagamento precedente non è ancora riuscito
-
PRODUCT_CART_EMPTY- Trigger: Carrello prodotti vuoto inviato
- Message: product_cart è vuoto
-
PRODUCT_IS_DELETED- Trigger: Prodotto eliminato in modo soft
- Message: Nessun messaggio
-
REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT- Trigger: L’importo totale del rimborso è superiore all’importo pagato
- Message: L’importo del rimborso calcolato è maggiore dell’importo pagato
-
REFUND_WINDOW_EXPIRED- Trigger: Fuori dalla finestra di rimborso consentita
- Message: I rimborsi non possono essere avviati giorni dopo la creazione del pagamento. Contatta support@dodopayments.com.
-
REQUEST_AMOUNT_BELOW_MINIMUM- Trigger: Importo < minimo del prodotto
- Message: L’importo non può essere inferiore al minimo specificato per il prodotto
-
SUBSCRIPTION_EXPIRED- Trigger: La fatturazione è passata oltre
ends_at - Message: La sottoscrizione è scaduta, impossibile creare nuovi addebiti
- Trigger: La fatturazione è passata oltre
-
SUBSCRIPTION_INACTIVE- Trigger: Lo stato ≠
ACTIVE - Message: La sottoscrizione non è attiva
- Trigger: Lo stato ≠
-
SUBSCRIPTION_NOT_ON_DEMAND- Trigger: Era previsto on-demand ma è arrivato un intervallo fisso
- Message: La sottoscrizione non è già on demand
-
SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED- Trigger: I tentativi di pagamento della sottoscrizione hanno superato il numero massimo di tentativi
- Message: È stato superato il limite massimo di 10 tentativi per questa sottoscrizione
-
TOO_MANY_REQUESTS- Trigger: Limite di velocità 429
- Message: Nessun messaggio
-
TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT- Trigger: Il totale combinato del carrello è inferiore al minimo del gateway
- Message: È richiesto un importo minimo di per elaborare il pagamento
-
UNABLE_TO_EDIT_PRIMARY_BRAND- Trigger: Tentativo di aggiornare il marchio primario tramite l’API normale
- Message: Il marchio primario non può essere aggiornato tramite questo endpoint API.
-
UNAUTHORIZED- Trigger: Nessuna chiave API o token/scope non valido
- Message: Non sei autorizzato a eseguire questa azione
-
UNSUPPORTED_ACTION- Trigger: Azione non supportata per il tipo di risorsa
- Message: Il cambio piano per le sottoscrizioni basate sull’utilizzo non è supportato
-
UNSUPPORTED_BILLING_CURRENCY- Trigger: Sottoscrizioni limitate al USD
- Message: Le valute di fatturazione non USD non sono supportate per le sottoscrizioni
-
UNSUPPORTED_COUNTRY- Trigger: Geolocalizzazione non ancora supportata
- Message: Il paese non è attualmente supportato
-
UNSUPPORTED_CURRENCY- Trigger: Valuta del prodotto o dell’addon non valida
- Message: La valuta non è attualmente supportata / Attualmente sono supportati solo prodotti in USD e INR / Solo USD e INR supportati per il prezzo degli addon / È possibile richiedere solo USD o INR per billing_currency / Valuta non supportata / Valuta imprevista per sottoscrizioni con carta indiana
-
UNSUPPORTED_DISCOUNT_TYPE- Trigger: Sconti a importo fisso, ecc., non ancora disponibili
- Message: Per ora sono supportati solo i codici sconto percentuali
-
UNSUPPORTED_PAYMENT_CURRENCY- Trigger: La valuta di pagamento è bloccata per il connettore
- Message: Le transazioni INR non sono supportate per questa transazione
-
UNSUPPORTED_TAX_CATEGORY- Trigger: La stringa della categoria fiscale non è nell’enumerazione
- Message: La categoria non è attualmente supportata
-
UNSUCCESSFUL_PAYMENT_ID- Trigger: L’ID pagamento fa riferimento a un pagamento non riuscito
- Message: L’ID pagamento ha uno stato non riuscito.
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Trigger: Tentativo di rimborsare un pagamento con importo zero
- Message: Impossibile rimborsare un pagamento con importo zero
Migliori Pratiche
- Gestisci sempre gli errori in modo elegante nella tua applicazione
- Implementa una corretta registrazione degli errori
- Usa messaggi di errore appropriati per gli utenti finali
- Implementa la logica di ripetizione per errori transitori
- Contatta il supporto per problemi irrisolti