Salvare il metodo di pagamento di un cliente senza effettuare un pagamento
Come salvare il metodo di pagamento di un cliente utilizzando un SetupIntent
L’API Setup Intents ti consente di salvare i dati di pagamento di un cliente senza un pagamento iniziale. Questa funzionalità è utile se vuoi configurare i pagamenti dei clienti quando li attivi e addebitare gli importi in un secondo momento, quando sono offline.
Utilizza questa integrazione per configurare i pagamenti ricorrenti o per creare pagamenti una tantum con un importo finale determinato in un secondo momento, spesso dopo che il cliente riceve il servizio.
Transazioni con carta presente
Le transazioni con carta presente, come la raccolta dei dati della carta tramite Stripe Terminal, utilizzano una procedura diversa per salvare il metodo di pagamento. Per ulteriori informazioni, consulta la documentazione di Terminal.
Conformità
Quando salvi i dati di pagamento di un cliente, sei responsabile della conformità a tutte le leggi, le normative e le regole del circuito applicabili. Questi requisiti si applicano generalmente se vuoi salvare il metodo di pagamento del cliente per un uso futuro, ad esempio visualizzando il metodo di pagamento del cliente nel flusso di pagamento per un acquisto futuro o addebitando il pagamento quando il cliente non sta utilizzando attivamente il sito web o l’app Aggiungi al tuo sito web o alla tua app delle condizioni che indichino come intendi salvare i dati del metodo di pagamento e permetti ai clienti di accettare o meno queste condizioni
Quando salvi un metodo di pagamento, puoi utilizzarlo solo per l’utilizzo specifico che hai incluso nelle tue condizioni. Per addebitare un metodo di pagamento quando un cliente è offline e salvarlo come opzione per acquisti futuri, accertati di raccogliere esplicitamente il consenso del cliente per questo uso specifico. Ad esempio, includi una casella di controllo “Salva il mio metodo di pagamento per uso futuro” per raccogliere il consenso.
Per eseguire un addebito quando il cliente è offline, assicurati che i tuoi termini includano quanto segue:
- Il consenso del cliente a disporre un pagamento o una serie di pagamenti per suo conto per determinate transazioni.
- La tempistica e la frequenza dei pagamenti previste (ad esempio, se gli addebiti sono per rate programmate, pagamenti di abbonamenti o ricariche non programmate).
- Il modo in cui determini l’importo del pagamento.
- I tuoi termini di cancellazione, se la modalità di pagamento è per un servizio in abbonamento.
Assicurati di conservare una copia scritta del consenso fornito dal cliente relativamente a questi termini.
Nota
Se devi utilizzare la conferma manuale lato server o la tua integrazione richiede l’indicazione separata del metodo di pagamento, consulta la nostra guida alternativa.
Configurare StripeLato server
Innanzitutto crea un account Stripe o accedi.
Utilizza le nostre librerie ufficiali per accedere all’API Stripe dalla tua applicazione:
Abilitare modalità di pagamento
Visualizza le impostazioni delle modalità di pagamento e abilita le modalità di pagamento che vuoi accettare. Per creare un SetupIntent è necessario che sia abilitata almeno una modalità di pagamento.
Per impostazione predefinita, Stripe abilita le carte e altri metodi di pagamento tra i più utilizzati per aiutarti a raggiungere più clienti. Detto ciò, ti consigliamo di attivare ulteriori metodi pertinenti per la tua attività e i tuoi clienti. Per ulteriori informazioni sul supporto di prodotti e metodi di pagamento, consulta la sezione Supporto per il metodo di pagamento. Per le commissioni consulta la nostra pagina delle tariffe.
Creare un oggetto CustomerLato server
Per configurare una modalità di pagamento per pagamenti futuri, è necessario associarla a un Customer. Crea un oggetto Customer
quando il cliente crea un account con la tua azienda. Gli oggetti Customer
permettono di riutilizzare le modalità di pagamento e di monitorare più pagamenti.
Creare un SetupIntentLato server
Nota
Se vuoi presentare Payment Element senza prima creare un SetupIntent, consulta la sezione Raccogliere i dati di pagamento prima di creare un intento.
Un SetupIntent è un oggetto che rappresenta la tua intenzione di configurare un metodo di pagamento per i pagamenti futuri di un cliente. I metodi di pagamento mostrati ai clienti durante il completamento della transazione sono inclusi anche nel SetupIntent
. Puoi consentire Stripe di acquisire automaticamente i metodi di pagamento dalle impostazioni della Dashboard oppure puoi elencarli manualmente.
A meno che la tua integrazione non richieda un’opzione con codice per offrire le modalità di pagamento, Stripe consiglia l’opzione automatica. Questo perché Stripe valuta le limitazioni delle modalità di pagamento, la valuta e altri parametri per determinare l’elenco delle modalità di pagamento accettate. Le modalità di pagamento che migliorano la conversione e che sono più pertinenti alla valuta e alla posizione del cliente hanno la priorità. Le modalità di pagamento con priorità più bassa sono nascoste sotto un menu extra.
Recuperare la chiave privata client
L’oggetto SetupIntent contiene una chiave privata client, che il lato client usa per completare la procedura di pagamento in modo sicuro. Per specificare la chiave privata sul lato client, puoi utilizzare approcci diversi.
Utilizzo di Radar
Quando viene salvato il metodo di pagamento di un cliente senza un pagamento iniziale, Radar non agisce sul SetupIntent per impostazione predefinita. Se vuoi attivare questa opzione per impostazione predefinita, vai su Impostazioni Radar e attiva Usa Radar per i metodi di pagamento salvati per uso futuro.
Acquisire i dati di pagamentoLato client
A questo punto è tutto pronto per acquisire i dati di pagamento sul client con Payment Element. Payment Element è un componente di interfaccia utente preintegrato che semplifica l’acquisizione dei dati di pagamento per vari metodi di pagamento.
Payment Element contiene un iframe che invia a Stripe informazioni sul pagamento in modo sicuro tramite una connessione HTTPS. Affinché l’integrazione funzioni, l’indirizzo della pagina di pagamento deve iniziare con https://
anziché con http://
. Puoi testare l’integrazione senza usare questo metodo, ma ricorda di abilitare la connessione HTTPS quando sarà tutto pronto per accettare i pagamenti in modalità live.
Il Payment Element visualizza un modulo dinamico che consente al cliente di scegliere una modalità di pagamento. Per ogni modalità di pagamento, il modulo richiede automaticamente al cliente di inserire tutti i dati di pagamento necessari.
Personalizza l’aspetto
Personalizza Payment Element in base al design del tuo sito specificando l’oggetto appearance in options
al momento della creazione del provider Elements
.
Richiedi il token esercente di Apple Pay
Se accetti pagamenti con Apple Pay, ti consigliamo di configurare l’interfaccia di Apple Pay in modo che restituisca un token esercente che consente di abilitare le transazioni avviate dall’esercente (MIT). Richiedi il tipo di token esercente pertinente nel componente Payment Element. L’esempio che segue mostra una richiesta di token esercente per i pagamenti dilazionati.
const paymentElement = elements.create('payment', { applePay: { deferredPaymentRequest: { paymentDescription: 'My deferred payment', managementURL: 'https://example.com/billing', deferredBilling: { amount: 2500, label: 'Deferred Fee', deferredPaymentDate: new Date('2024-01-05') }, } }, // Other options });
Configura valuta
Quando utilizzi i SetupIntent con automatic_payment_methods, puoi specificare la valuta quando crei il Payment Element. Il Payment Element visualizza i metodi di pagamento abilitati che supportano la valuta specificata. Per ulteriori informazioni, consulta la documentazione su Payment Element.
Raccogli indirizzi
Per impostazione predefinita, Payment Element raccoglie solo i dettagli relativi all’indirizzo di fatturazione necessari. Per acquisire l’indirizzo di fatturazione completo di un cliente (ad esempio, per calcolare l’imposta su beni e servizi digitali) o l’indirizzo di spedizione, utilizza Address Element.
FacoltativoLink nella pagina di pagamentoLato client
Consenti ai clienti di pagare più rapidamente utilizzando Link in Payment Element. Puoi compilare automaticamente le informazioni per qualsiasi cliente connesso che già utilizza Link, indipendentemente dal fatto che abbia inizialmente salvato le proprie informazioni in Link con un’altra attività. L’integrazione predefinita di Payment Element include un messaggio Stripe sul modulo della carta. Per gestire Link in Payment Element, accedi alle impostazioni del metodo di pagamento.

Acquisisci l’indirizzo email dei clienti per l’autenticazione o l’iscrizione a Link
Opzioni di integrazione
Esistono due modi per integrare Link con il Payment Element. Tra questi, Stripe consiglia di specificare un indirizzo email del cliente nel Payment Element (se disponibile). Ricorda di considerare come funziona la procedura di pagamento quando decidi tra queste opzioni:
Opzione di integrazione | Flusso di pagamento | Descrizione |
---|---|---|
Specifica l’indirizzo email di un cliente nel Payment Element Consigliato |
| Specifica sistematicamente l’indirizzo email del cliente nel Payment Element. In questo scenario, un cliente effettua l’autenticazione a Link direttamente tramite il modulo di pagamento e non da un componente dell’interfaccia utente separato. |
Raccogliere l’indirizzo email del cliente nel Payment Element | I tuoi clienti inseriscono il loro indirizzo email ed effettuano l’autenticazione o l’iscrizione a Link direttamente nel Payment Element durante il pagamento. | Se un cliente non si è iscritto a Link e sceglie una modalità di pagamento supportata nel Payment Element, gli viene richiesto di salvare i propri dati tramite Link. Per coloro che si sono già iscritti, Link compila automaticamente le informazioni di pagamento. |
FacoltativoSalva e recupera i metodi di pagamento del cliente
Puoi configurare Payment Element per salvare i metodi di pagamento del cliente per usi futuri. Questa sezione mostra come integrare la funzione dei metodi di pagamento salvate, che consente a Payment Element di:
- Richiedere agli acquirenti il consenso per il salvataggio di un metodo di pagamento
- Salva le modalità di pagamento quando gli acquirenti forniscono il consenso
- Mostra le modalità di pagamento salvate agli acquirenti per gli acquisti futuri
- Aggiorna automaticamente le carte smarrite o scadute quando gli acquirenti le sostituiscono

Salva i metodi di pagamento.

Riutilizza un metodo di pagamento salvato in precedenza.
Abilita il salvataggio del metodo di pagamento in Payment Element
Crea una CustomerSession sul tuo server fornendo l’ID cliente e abilitando il componente payment_element per la tua sessione. Configura le funzionalità dei metodi di pagamento salvati che vuoi abilitare. Ad esempio, abilitando payment_method_save, viene visualizzata una casella di controllo che consente ai clienti di salvare i dati di pagamento per usi futuri.
Puoi specificare setup_
in una PaymentIntent o in una sessione di Checkout per ignorare il comportamento predefinito per il salvataggio dei metodi di pagamento. In questo modo, salvi automaticamente il metodo di pagamento per uso futuro, anche se il cliente non sceglie esplicitamente di salvarlo.
Attenzione
Se permetti agli acquirenti di rimuovere i metodi di pagamento salvati abilitando payment_method_remove, ci saranno effetti sugli abbonamenti che dipendono da tale metodo di pagamento. La rimozione del metodo di pagamento scollega il PaymentMethod dal cliente.
La tua istanza Elements utilizza la chiave privata client della CustomerSession per accedere ai metodi di pagamento salvati del cliente. Gestisci gli errori correttamente quando crei l’oggetto CustomerSession. Se si verifica un errore, non devi fornire la chiave privata client della CustomerSession all’istanza Elements, in quanto è facoltativa.
Crea l’istanza Elements utilizzando le chiavi private client sia per SetupIntent che per CustomerSession. Poi utilizza questa istanza di Elements per creare un Payment Element.
// Create the CustomerSession and obtain its clientSecret const res = await fetch("/create-intent-and-customer-session", { method: "POST" }); const { customer_session_client_secret: customerSessionClientSecret } = await res.json(); const elementsOptions = { clientSecret: '{{CLIENT_SECRET}}', customerSessionClientSecret, // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret // and CustomerSession's client secret obtained in a previous step const elements = stripe.elements(elementsOptions); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element');
Quando confermi il SetupIntent, Stripe.js controlla automaticamente l’impostazione allow_redisplay sul PaymentMethod, a condizione che il cliente abbia selezionato la casella per salvare i propri dati di pagamento.
Rileva la selezione di una modalità di pagamento salvata
Quando viene selezionata una modalità di pagamento salvata, per controllare i contenuti dinamici ascolta l’evento change
del Payment Element, che viene popolato con la modalità di pagamento selezionata.
paymentElement.on('change', function(event) { if (event.value.payment_method) { // Control dynamic content if a saved payment method is selected } })
Inviare i dati di pagamento a StripeLato client
Usa stripe.confirmSetup per completare la configurazione con i dati raccolti da Payment Element. Fornisci a questa funzione un return_url in modo che Stripe possa reindirizzare l’utente dopo il completamento della configurazione. L’utente può essere dapprima reindirizzato su un sito intermedio, come una pagina di autorizzazione bancaria, e poi al return_
.
Se il cliente salva i dati della carta, li reindirizziamo immediatamente al return_
quando la configurazione ha esito positivo. Se vuoi impedire il reindirizzamento per i pagamenti con carta, puoi impostare il reindirizzamento su if_
. In questo modo vengono reindirizzati solo i clienti che utilizzano metodi di pagamento basati sul reindirizzamento.
Assicurati che il return_
corrisponda a una pagina del tuo sito web che fornisce lo stato del SetupIntent
. Quando Stripe reindirizza il cliente al return_
, fornisce i seguenti parametri di ricerca dell’URL per verificare lo stato. Quando specifichi il return_
, puoi anche aggiungere i tuoi parametri di ricerca che saranno mantenuti durante la procedura di reindirizzamento.
Parametro | Descrizione |
---|---|
setup_ | Identificativo univoco per il SetupIntent |
setup_ | La chiave privata client dell’oggetto SetupIntent . |
Puoi usare stripe.retrieveSetupIntent per recuperare il SetupIntent usando il parametro di ricerca setup_
. Se la conferma del SetupIntent ha esito positivo, l’ID PaymentMethod
risultante (in result.
) viene salvato per il Customer
fornito.
Attenzione
Se disponi di strumenti che tracciano la sessione del browser del cliente, potresti aver bisogno di aggiungere il dominio stripe.
all’elenco di esclusione dei referrer. I reindirizzamenti fanno sì che alcuni strumenti creino nuove sessioni, il che ti impedisce di tracciare la sessione completa.
Addebita in un secondo momento l'importo sulla modalità di pagamento salvataLato server
Conformità
Quando salvi i dati di pagamento di un cliente, sei responsabile della conformità a tutte le leggi, le normative e le regole del circuito applicabili. Quando presenti al cliente finale i metodi di pagamento utilizzati in passato per acquisti futuri, accertati di elencare i metodi di pagamento per i quali hai raccolto il consenso a salvare i dati del metodo di pagamento per gli usi futuri specifici. Per differenziare i metodi di pagamento legati ai clienti che possono o non possono essere presentati al cliente finale come metodo di pagamento salvato per acquisti futuri, utilizza il parametro allow_redisplay.
Quando hai la certezza di voler addebitare l’importo al cliente al di fuori della sessione, utilizza gli ID Customer e PaymentMethod per creare un PaymentIntent. Per trovare un metodo di pagamento per l’addebito, elenca i metodi di pagamento associati al tuo cliente. In questo esempio sono elencate le carte, ma puoi aggiungere qualsiasi altro tipo supportato.
Quando hai gli ID Customer e PaymentMethod, crea un PaymentIntent con l’importo e la valuta del pagamento. Per effettuare il pagamento al di fuori della sessione, imposta alcuni altri parametri:
- Imposta off_session su
true
per indicare che il cliente non si trova nel tuo flusso di pagamento durante il tentativo di pagamento e non può soddisfare una richiesta di autenticazione fatta da un partner, come un emittente di carte, una banca o un altro istituto di pagamento. Se, durante il flusso di pagamento, un partner richiede l’autenticazione, Stripe richiede le esenzioni utilizzando le informazioni del cliente presenti in una precedente transazione all’interno della sessione. Se le condizioni per l’esenzione non sono soddisfatte, PaymentIntent potrebbe generare un errore. - Imposta su
true
il valore della proprietà confirm del PaymentIntent. Di conseguenza, viene generata una conferma immediata al momento della creazione del PaymentIntent. - Imposta payment_method sull’ID del PaymentMethod e customer sull’ID del cliente.
Quando un tentativo di pagamento non va a buon fine, anche la richiesta non riesce. Viene visualizzato un codice di stato HTTP 402 e lo stato del PaymentIntent è requires_payment_method. Devi chiedere al cliente di tornare nell’applicazione per completare il pagamento (ad esempio inviando un’email o una notifica in-app).
Verifica il codice dell’errore generato dalla libreria dell’API Stripe. Se il pagamento non è riuscito a causa di un codice di rifiuto authentication_required, utilizza la chiave privata client del PaymentIntent rifiutato con confirmPayment per consentire al cliente di autenticare il pagamento.
const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ // The client secret of the PaymentIntent clientSecret, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } });
Nota
Il completamento della fase stripe.
può richiedere diversi secondi. Nel frattempo, disabilita il nuovo invio del modulo e mostra un indicatore di attesa, ad esempio una rotellina che gira. Se viene restituito un errore, mostralo al cliente, riabilita il modulo e nascondi l’indicatore di attesa. Se il cliente deve eseguire operazioni aggiuntive per completare il pagamento, ad esempio l’autenticazione, Stripe.js guida l’utente nella procedura.
Se il pagamento non va a buon fine per altri motivi, ad esempio fondi insufficienti sulla carta, indirizza il cliente a una pagina di pagamento dove inserire una nuova modalità di pagamento. Puoi riutilizzare l’oggetto PaymentIntent esistente per tentare di nuovo il pagamento con i dati della nuova modalità di pagamento.
Testa l'integrazione
Usa i dettagli di pagamento e la pagina di reindirizzamento di test per verificare se il funzionamento dell’integrazione è quello atteso. Per visualizzare i dettagli relativi a ciascuna modalità di pagamento, fai clic sulle seguenti schede:
Eseguire il test dell’addebito con un PaymentMethod con addebito SEPA salvato
La conferma del SetupIntent usando iDEAL, Bancontact o Sofort genera un PaymentMethod di tipo addebito diretto SEPA. L’addebito diretto SEPA è un metodo di pagamento con notifica differita che transita da uno stato intermedio processing
prima di passare a uno stato succeeded
o requires_
alcuni giorni dopo.
FacoltativoPersonalizzare il layoutLato client
Puoi personalizzare il layout di Payment Element (menu a tendina o schede) per adattarlo alla tua interfaccia di pagamento. Per ulteriori informazioni su ciascuna proprietà, consulta elements.create.
L’immagine seguente è lo stesso Payment Element reso utilizzando configurazioni di layout diverse:

Layout di Payment Element
FacoltativoApple Pay e Google PayLato client
Quando abiliti i pagamenti con carta, vengono visualizzati Apple Pay e Google Pay per i clienti il cui ambiente soddisfa le condizioni di visualizzazione del wallet. Inoltre, per accettare pagamenti da questi wallet:
- Abilitali nelle impostazioni dei metodi di pagamento. Apple Pay è abilitato per impostazione predefinita.
- Registra il tuo dominio.
Test regionaliIndia
Stripe Elements non supporta Google Pay o Apple Pay per gli account e i clienti Stripe in India. Pertanto, non è possibile testare l’integrazione con Google Pay o Apple Pay se l’indirizzo IP del tester è in India, anche se l’account Stripe si trova al di fuori dell’India.
Comunicare ai clienti l’utilizzo di Stripe
Stripe raccoglie informazioni sulle interazioni dei clienti con Elements per fornirti servizi, prevenire le frodi e migliorare i propri servizi. Ad esempio, utilizza cookie e indirizzi IP per identificare quali Elements sono stati visualizzati da un cliente durante una singola sessione di pagamento. Sei responsabile della comunicazione e della raccolta di tutti i diritti e i consensi necessari affinché Stripe utilizzi i dati in questi modi. Per ulteriori informazioni, visita il nostro Centro privacy.