Funzioni mancanti · 7 min di lettura ·
Aggiungere pagamenti Stripe a un'app creata con l'AI
Come aggiungere pagamenti Stripe a un'app fatta con Lovable, Bolt o Cursor: checkout, webhook, modalità test e i principi da sapere su fatture e IVA.

Vuoi aggiungere pagamenti Stripe alla tua app creata con l'AI e far pagare i clienti con carta in modo sicuro? Si può fare, anche se hai costruito tutto con Lovable, Bolt, Replit o Cursor. Il punto non è far comparire il pulsante «Paga ora», che l'AI genera in pochi secondi. È assicurarsi che il pagamento venga confermato dal server, che la chiave segreta resti segreta e che tu abbia provato tutto in modalità test prima di incassare soldi veri. Qui ti spieghiamo come funziona, dove si sbaglia più spesso e come verificare che la tua integrazione regga.
Come funziona un pagamento con Stripe, in parole semplici
Stripe si occupa della parte delicata: raccoglie i dati della carta, parla con la banca e ti versa i soldi. La tua app non deve mai vedere né salvare il numero della carta.
Per capire dove si inceppano le cose servono due concetti. Il frontend è la parte dell'app che gira nel browser del cliente: tutto quello che contiene può essere letto da chiunque. Il backend è la parte che gira su un server, lontano dagli occhi degli utenti. È il retrobottega del negozio, dove si tengono la cassa e le chiavi.
Stripe ti dà due tipi di chiavi:
- la chiave pubblicabile (inizia con
pk_), che può stare nel frontend; - la chiave segreta (inizia con
sk_), che permette di creare addebiti e rimborsi e deve stare solo nel backend.
Il flusso più semplice e sicuro è Stripe Checkout. La tua app chiede al backend di creare una sessione di pagamento, il cliente viene mandato su una pagina di pagamento ospitata da Stripe, paga e torna alla tua app. Poi Stripe avvisa il tuo server con un webhook, cioè una notifica automatica che dice «questo pagamento è andato a buon fine». È come la conferma che la banca manda al negoziante, indipendentemente da cosa racconta il cliente.
Perché i pagamenti generati con l'AI spesso non sono affidabili
Gli strumenti AI sono bravissimi a costruire l'interfaccia, meno a ragionare su cosa può andare storto. Questi sono i problemi che incontriamo più spesso quando controlliamo un'integrazione Stripe nata da un prompt:
- Chiave segreta nel frontend. Se
sk_live_...finisce nel codice che arriva al browser, chiunque può usarla per operare sul tuo account. È lo stesso problema descritto nella guida sulle chiavi API esposte nel frontend. - Il prezzo arriva dal browser. Se è il frontend a dire al backend «addebita 9 euro», un utente smaliziato può modificare la richiesta e pagare molto meno. Il prezzo va preso dal backend o, meglio, dai prezzi creati nella dashboard di Stripe.
- Il pagamento si considera riuscito perché l'utente è arrivato alla pagina «grazie». Quella pagina si può aprire scrivendo l'indirizzo a mano. L'accesso al prodotto va sbloccato solo dopo una conferma lato server.
- Webhook mancanti o non verificati. Senza webhook la tua app non sa nulla di rinnovi, carte rifiutate o rimborsi. E un webhook che non verifica la firma di Stripe accetta notifiche false da chiunque.
- Chiavi di test e live mescolate. Prodotti creati in test con chiavi live, o viceversa, producono errori e pagamenti che non compaiono dove te li aspetti.
Come capire se la tua integrazione ha un problema
Ecco i segnali più comuni e cosa significano.
| Sintomo | Causa probabile | Cosa fare |
|---|---|---|
Errore No such price: 'price_...' | Prezzo creato in test ma chiave live, o il contrario | Ricrea il prezzo nell'ambiente giusto e aggiorna l'identificativo |
Errore Invalid API Key provided | Chiave mancante, sbagliata o non impostata online | Controlla le variabili d'ambiente o i secret del backend |
| Il cliente paga ma l'app non sblocca nulla | Il webhook non arriva o va in errore | Guarda i tentativi di consegna nella dashboard di Stripe |
| L'accesso si sblocca anche senza pagare | Lo sblocco dipende dalla pagina di ritorno | Sposta il controllo sul server |
Errore No signatures found matching the expected signature for payload | Firma del webhook verificata male | Controlla il segreto whsec_ e che il corpo della richiesta non venga modificato |
Due verifiche che puoi fare da solo:
- apri la tua app online, premi F12 per aprire gli strumenti per sviluppatori e cerca
sk_liveesk_testin tutti i file caricati (in Chrome: Ctrl+Shift+F, su Mac Cmd+Option+F). Se compaiono, la chiave segreta è esposta; - nella dashboard di Stripe, nell'area dedicata agli sviluppatori, controlla se esiste un endpoint webhook e se le consegne recenti risultano riuscite o fallite.
Aggiungere Stripe alla tua app: i passi sicuri
Questo è l'ordine che seguiamo di solito, con qualunque strumento.
- Crea l'account Stripe e resta in modalità test. Stripe offre un ambiente di prova (la modalità test, che oggi chiama anche «sandbox») con chiavi separate. Lì nessun pagamento è reale.
- Crea prodotti e prezzi nella dashboard. Così il prezzo vive su Stripe e la tua app usa solo il suo identificativo (
price_...), non una cifra che si può manipolare. - Metti la chiave segreta nel posto giusto. Va salvata come variabile d'ambiente o «secret» del backend: un valore che il server legge quando gli serve e che non compare nel codice. Se non ti è chiaro come funzionano, leggi la guida sulle variabili d'ambiente e le chiavi API online.
- Crea la sessione di pagamento dal backend. Una funzione sul server (per esempio una edge function di Supabase, cioè un piccolo pezzo di codice che gira sui server del fornitore) crea la sessione Checkout e restituisce al frontend solo il link a cui mandare il cliente.
- Configura il webhook e verifica la firma. Stripe firma ogni notifica con un segreto che inizia con
whsec_, e il tuo backend deve controllare quella firma prima di fidarsi. Rispondi subito con un codice di successo e gestisci i duplicati: Stripe può inviare lo stesso evento più di una volta e, se il tuo server non risponde, in modalità live riprova per un massimo di tre giorni. - Prova tutti i casi con le carte di test.
4242 4242 4242 4242simula un pagamento riuscito,4000 0000 0000 0002una carta rifiutata,4000 0025 0000 3155una carta che richiede l'autenticazione 3D Secure. Prova anche l'annullamento, il tasto indietro e il rimborso. - Passa a live con calma. Completa i dati della tua attività su Stripe, porta prodotti, prezzi e webhook nell'ambiente live, sostituisci le chiavi e fai un primo acquisto reale di piccolo importo, da rimborsare subito.
Se usi Lovable
Lovable ha un'integrazione Stripe dedicata. Salva la chiave come secret del backend (su Lovable Cloud o sul tuo progetto Supabase) e costruisce il flusso con edge functions. Secondo la documentazione ufficiale, di default non usa webhook: l'app chiede direttamente a Stripe lo stato di pagamenti e abbonamenti. Un dettaglio importante: l'anteprima non ha un ambiente di test separato, quindi se hai inserito la chiave live i pagamenti fatti dall'anteprima sono veri.
Se usi Bolt, Replit o Cursor
La logica non cambia. Chiedi esplicitamente all'AI di creare la sessione di pagamento lato server, di leggere la chiave da una variabile d'ambiente e di aggiungere un endpoint webhook con verifica della firma. Poi controlla che lo abbia fatto davvero: l'AI tende a dichiarare «fatto» anche quando ha preso scorciatoie.
Abbonamenti e area clienti
Per gli abbonamenti, oltre al checkout ti serve un modo per far gestire al cliente carta e disdetta. Stripe offre un portale clienti già pronto. Ricorda di collegare lo stato dell'abbonamento ai permessi nel tuo database: chi disdice deve perdere l'accesso al momento giusto.
Fatture, IVA e ricevute: i principi da conoscere
Qui entriamo in un terreno fiscale, quindi ci limitiamo ai principi.
- Stripe incassa, ma non fa il commercialista. Ti versa i pagamenti al netto delle commissioni, ma non decide se e come devi emettere fattura.
- In Italia la fattura elettronica passa dal Sistema di Interscambio (SdI) dell'Agenzia delle Entrate. Le ricevute e le fatture generate da Stripe non vengono trasmesse allo SdI, quindi di norma da sole non bastano.
- L'IVA dipende da chi sei e da chi è il cliente: privato o azienda, Italia, Unione Europea o fuori UE, regime fiscale. Stripe offre uno strumento a pagamento per il calcolo delle imposte, ma va configurato in base alla tua posizione.
- Raccogli subito i dati che servono. Se devi emettere fattura, chiedi nel checkout i dati necessari (per esempio codice fiscale o partita IVA) fin dal primo giorno.
Prima di aprire le vendite, parla con il tuo commercialista: ti dirà cosa emettere, quando e con quale strumento. Se poi vuoi collegare l'app a un software di fatturazione, trovi i principi nella guida su come integrare servizi esterni nella tua app.
Quando conviene farti aiutare
Puoi seguire questi passi da solo, soprattutto se vendi un singolo prodotto con Checkout. Conviene invece farti affiancare se gestisci abbonamenti, piani diversi, accessi che dipendono dal pagamento, o se hai già incassato e non sei sicuro che tutto torni. Lo stesso vale se l'AI ha riscritto l'integrazione più volte e non sai più quale versione stia girando.
Di solito controlliamo dove stanno le chiavi, come viene confermato il pagamento, se i webhook sono verificati e se il passaggio da test a live è fatto bene. Se vuoi capire da dove partire, prenota una call gratuita: in 20 minuti guardiamo insieme la tua situazione.


