GitHub Repository
Codice sorgente per il boilerplate FastAPI e Dodo Payments.
Panoramica
Il boilerplate FastAPI è un backend Python con Dodo Payments già connesso. Include endpoint che creano checkout session e sessioni del Customer Portal, un endpoint webhook che verifica le firme e una pagina dei prezzi renderizzata con template Jinja2.Questo boilerplate usa FastAPI con
async route handler, Pydantic per la validazione e le impostazioni e dodopayments Python SDK. Gli handler chiamano il client sincrono DodoPayments. Per evitare di bloccare l’event loop, passa a AsyncDodoPayments e await le relative chiamate.Caratteristiche
Il boilerplate include:- Configurazione rapida: dal clone a un server in esecuzione in circa cinque minuti.
- Handler asincroni: gli handler delle route sono funzioni FastAPI
async def. - Checkout session: un endpoint checkout preconfigurato che usa il Python SDK.
- Gestione dei webhook: un endpoint webhook che verifica ogni firma con il metodo
unwrapdell’SDK. - Customer Portal: un endpoint che crea sessioni del Customer Portal.
- Sicurezza dei tipi: i modelli Pydantic convalidano i request body e il codice usa i type hint.
- Configurazione dell’ambiente:
pydantic-settingscarica e convalida la configurazione da.env.
Prerequisiti
Prima di iniziare, ti servono:- Python 3.9 o versione successiva, richiesto dall’SDK
dodopayments. È consigliato Python 3.11 o versione successiva. - pip o uv per la gestione dei pacchetti.
- Un account Dodo Payments, per creare una API key e un webhook signing secret nella dashboard.
Avvio rapido
1
Clone the Repository
2
Create Virtual Environment
Configura un ambiente Python isolato:In alternativa, usa uv per una gestione più rapida delle dipendenze:
3
Install Dependencies
4
Get API Credentials
Registrati su Dodo Payments, quindi recupera le credenziali dalla dashboard:
- API Key: crea una chiave in Dashboard → Developer → API Keys.
- Webhook Key: aggiungi un endpoint in Dashboard → Developer → Webhooks, quindi copia il relativo signing secret. L’URL dell’endpoint deve essere pubblico e usare HTTPS. Per ricevere eventi sulla tua macchina, consulta Testing Webhooks Locally.
5
Configure Environment Variables
Copia il file di esempio per creare un file Imposta i valori sulle tue credenziali Dodo Payments:Tutte e quattro le variabili sono obbligatorie.
.env nella directory principale:.env
app/core/config.py le carica con pydantic-settings e l’app non si avvia se una variabile è assente o vuota. DODO_PAYMENTS_RETURN_URL è il punto in cui il checkout reindirizza il cliente dopo il pagamento.6
Add Your Products
Sostituisci i prodotti di esempio in
app/lib/products.py con i tuoi. Imposta ogni product_id sull’ID di un prodotto nella sezione Products della dashboard. La pagina dei prezzi mostra questi prodotti.7
Run the Development Server
Swagger UI elenca gli endpoint
/api/checkout/, /api/webhook/ e /api/customer-portal/, pronti per essere testati.http://localhost:8000, serve la pagina dei prezzi.Struttura del progetto
Endpoint API
app/main.py monta ogni router con un prefisso /api:
Ogni percorso termina con una barra. FastAPI risponde a una richiesta del percorso senza barra con un reindirizzamento
307, quindi usa il percorso esatto, soprattutto nel tuo URL webhook.
Esempi di codice
Questi esempi sono estratti dai file inapp/api/.
Creazione di una sessione di checkout
app/api/checkout.py crea una sessione di checkout e restituisce il relativo checkout_url. Il corpo della richiesta accetta un product_id, un quantity opzionale e un oggetto customer opzionale con name e email:
Gestione dei webhook
app/api/webhook.py verifica la firma con il metodo unwrap dell’SDK, quindi gestisce i diversi tipi di evento:
Integrazione con Customer Portal
app/api/portal.py crea una sessione Customer Portal per un ID cliente e restituisce il link al portale come url:
app/templates/index.html invia un ID cliente hardcoded (cus_001) a questo endpoint e un nome e un indirizzo email hardcoded all’endpoint di checkout. Sostituiscili con i valori dell’utente autenticato.
Eventi webhook
Il gestore inapp/api/webhook.py gestisce i seguenti eventi:
Per gestire un altro evento, aggiungi un ramo per il relativo tipo, ad esempio
refund.succeeded per un rimborso elaborato correttamente. Per tutti i tipi di evento, consulta la guida agli eventi webhook.
Aggiungi la tua logica aziendale all’interno del gestore webhook per:
- Aggiornare le autorizzazioni degli utenti nel database
- Inviare email di conferma
- Provisionare l’accesso ai prodotti digitali
- Monitorare analisi e metriche
Test dei webhook in locale
Dodo Payments non può raggiungerelocalhost. Per lo sviluppo locale, usa uno strumento come ngrok per esporre il tuo server locale:
/api/webhook/, come endpoint nella tua Dodo Payments Dashboard:
DODO_PAYMENTS_WEBHOOK_KEY in .env, quindi riavvia il server. L’app legge .env solo all’avvio.
Deployment
Docker
Il repository non include unDockerfile. Per eseguire l’app in un container, aggiungi questo Dockerfile nella root del repository:
COPY . . copia ogni file nel contesto di build, incluso .env. Per mantenere le chiavi fuori dall’immagine, aggiungi un file .dockerignore che elenchi .env. Quindi crea l’immagine ed eseguila con il tuo file di ambiente:
Considerazioni per la produzione
Risoluzione dei problemi
Import errors or missing modules
Import errors or missing modules
Assicurati che l’ambiente virtuale sia attivato e che le dipendenze siano installate:
Server fails to start with Directory 'app/static' does not exist
Server fails to start with Directory 'app/static' does not exist
app/main.py serve i file statici da app/static, ma il repository non include quella directory. Creala con mkdir app/static, quindi avvia nuovamente il server.Checkout session creation fails
Checkout session creation fails
Verifica queste cause comuni:
- L’ID prodotto non esiste nella tua dashboard Dodo Payments.
- La chiave API o
DODO_PAYMENTS_ENVIRONMENTin.envè errata. Una chiave in modalità test funziona solo contest_mode.
400. Controlla i log di FastAPI per messaggi di errore dettagliati.Webhooks not receiving events
Webhooks not receiving events
Per i test locali, usa ngrok per esporre il tuo server:Nella tua Dodo dashboard, aggiungi un endpoint con l’URL di ngrok seguito da
/api/webhook/, inclusa la barra finale. Copia il signing secret dell’endpoint in DODO_PAYMENTS_WEBHOOK_KEY nel file .env.Webhook signature verification fails
Webhook signature verification fails
- Assicurati che
DODO_PAYMENTS_WEBHOOK_KEYin.envcorrisponda al signing secret dell’endpoint. - Verifica la firma rispetto al corpo grezzo della richiesta, prima di analizzarlo come JSON.
- Passa tutti e tre gli header
webhook-id,webhook-timestampewebhook-signatureaclient.webhooks.unwrap(). La firma Standard Webhooks copreid.timestamp.body, non solo il corpo.
Approfondimenti
Python SDK
Documentazione completa dell’SDK Python con supporto async
Webhooks Documentation
Scopri tutti gli eventi webhook e le best practice
Checkout Sessions
Approfondisci la configurazione delle sessioni di checkout
API Reference
Documentazione completa dell’API Dodo Payments
Supporto
Per ricevere assistenza sul boilerplate:- Fai domande nella community Discord.
- Segnala problemi e segui gli aggiornamenti nel repository GitHub.
- Invia un’email al team di supporto.