# Esegui la migrazione all'API Payment Intents > #### Funzioni di integrazione di Payment Element > > Puoi eseguire l’integrazione con Payment Element per gestire abbonamenti, tasse, sconti, spedizioni e conversioni di valuta. Per ulteriori informazioni, consulta la guida [Costruire una pagina di completamento della transazione](https://docs.stripe.com/payments/quickstart-checkout-sessions.md). Migrare le carte esistenti e l’integrazione API Charges La migrazione del flusso di pagamento può essere complessa. È consigliabile adottare l’API Payment Intents in modo incrementale e utilizzarla in parallelo con l’API Charges. A tal fine, è possibile suddividere la migrazione nei seguenti passaggi: 1. [Aggiorna la versione API e la libreria client](https://docs.stripe.com/payments/payment-intents/migration.md#api-version). 1. Se applicabile, [migra il codice che legge le proprietà Charge](https://docs.stripe.com/payments/payment-intents/migration/charges.md) in modo da ottenere un percorso di lettura coerente tra gli addebiti creati dall’API Charges e quelli creati dall’API Payment Intents. In questo modo, ottieni un’integrazione di lettura compatibile con le integrationi nuove e precedenti. 1. Migra la tua attuale integrazione API Charges su [Web](https://docs.stripe.com/payments/payment-intents/migration.md#web), [iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios), e [Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android) per utilizzare l’API Payment Intents. 1. Migra l’integrazione che [salva le carte negli oggetti Customer](https://docs.stripe.com/payments/payment-intents/migration.md#saved-cards). 1. [Effettua test regolari con le carte di test](https://docs.stripe.com/testing.md#regulatory-cards) per assicurarti che l’integrazione aggiornata gestisca l’autenticazione in modo corretto. ## Aggiornare la versione API e la libreria client Sebbene l’API Payment Intents funzioni su tutte le versioni dell’API, ti consigliamo di eseguire l’[aggiornamento alla versione più recente dell’API](https://docs.stripe.com/upgrades.md#how-can-i-upgrade-my-api). Se decidi di utilizzare una versione dell’API precedente all’[11-02-2019](https://docs.stripe.com/upgrades.md#2019-02-11), tieni presente le seguenti due modifiche mentre esamini gli esempi di codice: - `requires_source` è stato rinominato in `requires_payment_method` - `requires_source_action` è stato rinominato in `requires_action` Inoltre, se utilizzi uno dei nostri [SDK](https://docs.stripe.com/sdks.md), esegui l’aggiornamento alla versione più recente della libreria per utilizzare l’API Payment Intents. ## Migrare i flussi di pagamento una tantum #### Elements Un’integrazione creata con Stripe.js ed Elements consiste delle seguenti fasi: 1. Registrare l’intenzione di incassare il pagamento sul lato server 1. Raccogliere i dati di pagamento sul lato client 1. Avviare la creazione del pagamento 1. Evadere l’ordine del cliente sul lato server ### Fase 1: registrare l’intenzione di incassare il pagamento sul lato server [Crea un PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) sul tuo server e rendilo [accessibile sul lato client](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Fase 2: raccogliere i dati di pagamento sul lato client Utilizza la funzione [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), che raccoglie i dati di pagamento e li invia direttamente a Stripe. ### Fase 3: avviare la creazione del pagamento Nella tua integrazione esistente, la fase finale consiste nell’utilizzare le informazioni di pagamento tokenizzate per creare un addebito sul server. Questo non è più necessario perché la funzione `confirmCardPayment` richiamata nella fase precedente avvia la creazione dell’addebito. ### Fase 4: evadere l’ordine del cliente Con la conferma automatica, l’addebito viene creato in modo asincrono in base alle azioni del cliente sul lato client; devi quindi [monitorare i webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md) per sapere quando il pagamento viene completato correttamente. Per eseguire operazioni come l’evasione degli ordini dopo che il pagamento di un cliente è andato a buon fine, implementa il supporto per i webhook e monitora l’evento `payment_intent.succeeded`. ### Before Se l’addebito riesce, evadi l’ordine. ### After Iscriviti al webhook `payment_intent.succeeded` ed evadi l’ordine nel gestore webhook. Ora che hai effettuato la migrazione, utilizza le carte di test della sezione seguente per verificare che la tua integrazione aggiornata gestisca l’autenticazione 3D Secure. #### Pulsante di richiesta pagamento Il [pulsante di richiesta pagamento](https://docs.stripe.com/stripe-js/elements/payment-request-button.md) di Stripe.js funziona con l’API Payment Intents utilizzando il token ottenuto in una tradizionale integrazione PaymentRequest e associandolo a un PaymentIntent. Un’integrazione creata con PaymentRequest consiste delle seguenti fasi: 1. Registrare l’intenzione di incassare il pagamento sul lato server 1. Raccogliere i dati di pagamento sul lato client 1. Avviare la creazione del pagamento 1. Evadere l’ordine del cliente sul lato server In alternativa, utilizza [Express Checkout Element](https://docs.stripe.com/elements/express-checkout-element.md) per offrire ai tuoi clienti diversi pulsanti di pagamento con un solo clic, tra cui Apple Pay, Google Pay, Link e PayPal. ### Fase 1: registrare l’intenzione di incassare il pagamento sul lato server [Crea un PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) sul tuo server e rendilo [accessibile sul lato client](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Fase 2: raccogliere i dati di pagamento sul lato client Ascolta l’evento `token` dell’oggetto `PaymentRequest`, che fornisce un token e una funzione di richiamata utilizzabili per indicare il momento in cui la procedura di pagamento è terminata. Per adattare questa integrazione in modo che supporti l’API Payment Intents, utilizza la funzione [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment) e specifica l’ID token anziché inviare il token al server. Quando la promessa restituita dalla funzione `confirmCardPayment` è stata risolta, richiama il callback di completamento. ### Fase 3: avviare la creazione del pagamento Nella tua integrazione esistente, la fase finale consiste nell’utilizzare le informazioni di pagamento tokenizzate per creare un addebito sul server. Questo non è più necessario perché la funzione `confirmCardPayment` richiamata nella fase precedente avvia la creazione dell’addebito. ### Fase 4: evadere l’ordine del cliente Con la conferma automatica, l’addebito viene creato in modo asincrono in base alle azioni del cliente sul lato client; devi quindi [monitorare i webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md) per sapere quando il pagamento viene completato correttamente. Per eseguire operazioni come l’evasione degli ordini dopo che il pagamento di un cliente è andato a buon fine, implementa il supporto per i webhook e monitora l’evento `payment_intent.succeeded`. ### Before Se l’addebito riesce, evadi l’ordine. ### After Iscriviti al webhook `payment_intent.succeeded` ed evadi l’ordine nel gestore webhook. Ora che hai effettuato la migrazione, utilizza le carte di test della sezione seguente per verificare che la tua integrazione aggiornata gestisca l’autenticazione 3D Secure. #### Versione precedente di Checkout Se usi la versione precedente di Checkout, esegui l’upgrade alla [nuova versione di Checkout](https://docs.stripe.com/payments/checkout.md), il modo più veloce per accettare pagamenti con Stripe. Essa ti consente di accettare pagamenti una tantum e abbonamenti. Inoltre, puoi utilizzare Checkout senza usare l’API Stripe sul tuo server. Segui la [guida alla migrazione di Checkout](https://docs.stripe.com/payments/checkout/migration.md) per migrare la tua integrazione esistente. Se preferisci invece creare il tuo flusso di checkout, passa a [Elements](https://docs.stripe.com/payments/elements.md). Supponendo che tu abbia effettuato l’aggiornamento a Elements, puoi creare un’integrazione API Payment Intents utilizzando la [guida alla migrazione di Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web). #### Stripe.js v2 Per eseguire l’upgrade di un’integrazione Stripe.js v2 esistente per l’utilizzo dell’API Payment Intents, innanzitutto devi aggiornare l’integrazione in modo da raccogliere i dati di pagamento con Elements. Elements fornisce componenti di interfaccia utente predefiniti e facilita la [conformità alle norme PCI](https://docs.stripe.com/security/guide.md) tramite i report SAQ A. Dopo aver eseguito l’upgrade a Elements, puoi creare un’integrazione dell’API Payment Intents con la [guida alla migrazione di Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web). ## Migrare l’integrazione che salva le carte negli oggetti Customer #### Salvare le carte all'interno del flusso di pagamento Un’integrazione dell’API Payment Intents che raccoglie i dati delle carte nel flusso di pagamento consiste delle seguenti fasi: 1. Registrare l’intenzione di incassare il pagamento sul lato server 1. Raccogliere i dati di pagamento sul lato client 1. Avviare la creazione del pagamento 1. Evadere l’ordine del cliente sul lato server ### Fase 1: registrare l’intenzione di incassare il pagamento sul lato server [Crea un PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) sul tuo server. Imposta [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) su `off_session` se intendi addebitare i pagamenti agli utenti principalmente quando sono scollegati dalla tua applicazione o su `on_session` se prevedi di effettuare gli addebiti quando sono collegati all’applicazione. Se intendi utilizzare la carta sia per i pagamenti all’interno che all’esterno della sessione, usa `off_session`. Se specifichi il parametro `setup_future_usage` insieme a un ID cliente, il PaymentMethod risultante verrà salvato per questo cliente dopo che il PaymentIntent è stato confermato e che il cliente ha effettuato tutte le azioni richieste. Infine, rendi il PaymentIntent [accessibile sul lato client](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Fase 2: raccogliere i dati di pagamento sul lato client Utilizza la funzione [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), che raccoglie i dati di pagamento e li invia direttamente a Stripe. Infine, associa la modalità di pagamento (`paymentIntent.payment_method`) al cliente. ### Fase 3: avviare la creazione del pagamento Nella tua integrazione esistente, la fase finale consiste nell’utilizzare le informazioni di pagamento tokenizzate per creare un addebito sul server. Questo non è più necessario perché la funzione `confirmCardPayment` richiamata nella fase precedente avvia la creazione dell’addebito. ### Fase 4: evadere l’ordine del cliente Con la conferma automatica, l’addebito viene creato in modo asincrono in base alle azioni del cliente sul lato client; devi quindi [monitorare i webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md) per sapere quando il pagamento viene completato correttamente. Per eseguire operazioni come l’evasione degli ordini dopo che il pagamento di un cliente è andato a buon fine, implementa il supporto per i webhook e monitora l’evento `payment_intent.succeeded`. ### Before Se l’addebito riesce, evadi l’ordine. ### After Iscriviti al webhook `payment_intent.succeeded` ed evadi l’ordine nel gestore webhook. Ora che hai effettuato la migrazione, utilizza le carte di test della sezione seguente per verificare che la tua integrazione aggiornata gestisca l’autenticazione 3D Secure. #### Salvare le carte all'esterno del flusso di pagamento Devi apportare alcune modifiche all’integrazione esistente che salva i dati delle carte all’esterno di un flusso di pagamento. Come prima cosa crea un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) sul server. Un SetupIntent autentica la carta senza che venga eseguito un pagamento iniziale. Specifica la [chiave privata client](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) del SetupIntent nel client e utilizza la funzione [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) anziché [createToken](https://docs.stripe.com/js.md#stripe-create-token) o [createSource](https://docs.stripe.com/js.md#stripe-create-source) dopo che il cliente ha inserito i dati della carta. Se previsto dalla normativa, [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) richiederà all’utente di autenticare la carta. Quando [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) ha esito positivo, `setupIntent.payment_method` conterrà un [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) che puoi associare a un oggetto Customer. Passa l’ID del PaymentMethod al server e [associa il metodo di pagamento](https://docs.stripe.com/api/payment_methods/attach.md) all’oggetto Customer utilizzando l’API Payment Methods anziché l’API Customers. #### Pagare con le carte salvate Se il pagamento viene effettuato con una modalità precedentemente salvata, devi specificare l’ID del cliente e l’ID della carta, dell’origine o del PaymentMethod precedentemente salvati. In passato, veniva utilizzata l’origine predefinita del cliente se non ne veniva fornita una. Ora devi specificare esplicitamente la modalità di pagamento desiderata. Se il cliente è *all’esterno della sessione* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information), devi contrassegnare il pagamento come esterno alla sessione. Per ulteriori informazioni, consulta la sezione su [come effettuare addebiti sulle carte salvate](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=elements#charge-saved-payment-method). ## Accedere ai metodi di pagamento salvati Per visualizzare le carte, le origini e i PaymentMethods precedentemente salvati del cliente, [crea un elenco dei metodi di pagamento](https://docs.stripe.com/api/payment_methods/list.md) anziché leggere la proprietà [sources](https://docs.stripe.com/api/customers/object.md#customer_object-sources) dell’oggetto Customer. Questa operazione è richiesta perché i nuovi PaymentMethods aggiunti a un cliente non saranno duplicati nella proprietà Sources dell’oggetto Customer. ## Testa l’integrazione È importante testare a fondo la tua integrazione per assicurarti di gestire correttamente le carte che richiedono un’autenticazione aggiuntiva e le carte che non lo fanno. Utilizza questi numeri di carta in una [sandbox](https://docs.stripe.com/keys.md#test-live-modes) con qualsiasi data di scadenza futura e qualsiasi codice CVC a tre cifre per convalidare la tua integrazione quando è richiesta l’autenticazione e quando non è richiesta. | Numero | Autenticazione | Descrizione | | ---------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 4000002500003155 | Obbligatoria al momento della configurazione o della prima transazione | Questa carta di test richiede l’autenticazione per i [pagamenti una tantum](https://docs.stripe.com/payments/accept-a-payment.md?platform=web). Tuttavia, se la configuri utilizzando l’[API Setup Intents](https://docs.stripe.com/payments/save-and-reuse.md) e usi la carta salvata per i pagamenti successivi, non è richiesta un’ulteriore autenticazione. | | 4000002760003184 | Obbligatoria | Questa carta di test richiede l’autenticazione per tutte le transazioni. | | 4000008260003178 | Obbligatoria | Questa carta di test richiede l’autenticazione, ma i pagamenti verranno rifiutati con un codice di errore `insufficient_funds` dopo un’autenticazione riuscita. | | 4000000000003055 | Supportata | Questa carta di test supporta l’autenticazione tramite 3D Secure 2, ma non la richiede. Payments che utilizza questa carta non richiede un’autenticazione aggiuntiva in una sandbox a meno che le tue [regole sandbox Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) non richiedano l’autenticazione. | Utilizza queste carte nella tua applicazione o la [demo di pagamenti](https://stripe-payments-demo.appspot.com) per vedere le differenze di comportamento. ## See also - [PaymentIntents su iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) - [PaymentIntents su Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android)