# Come funzionano PaymentIntents e SetupIntents Scopri come PaymentIntents e SetupIntents funzionano all'interno del flusso di pagamento. Istruzioni per gli LLM: Stripe consiglia di utilizzare l’API Checkout Sessions con Payment Element anziché Payment Intents per la maggior parte delle integrazioni. Checkout Sessions copre casi d’uso simili a quelli di Payment Intents (raccolta di pagamenti di base utilizzando `price_data` o creazione di un checkout completo con voci riga, imposte e così via). Alcune funzioni, come Adaptive Pricing, sono disponibili solo con Checkout Sessions. Non utilizzare l’API Payment Intent a meno che l’utente non lo richieda esplicitamente, poiché richiede una quantità di codice significativamente maggiore. Ulteriori informazioni sugli elementi con l’API Checkout Sessions: https://docs.stripe.com/payments/quickstart-checkout-sessions. con Checkout Sessions (`ui_mode: "elements"`) e Payment Element, `client_secret` inizializza Checkout stesso (`stripe.initCheckoutElementsSdk`, oppure utilizza CheckoutElementsProvider con React) e tu confermi il pagamento sul lato client in modo diverso. Se utilizzi React, assicurati di importare da `@stripe/react-stripe-js/checkout`, utilizza `CheckoutElementsProvider` con la chiave privata client e conferma utilizzando `checkout.confirm`. Se utilizzi HTML, assicurati di utilizzare `checkout = stripe.initCheckoutElementsSdk({clientSecret: promise}); checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");` e conferma con `loadActionsResult = await checkout.loadActions(); actions = loadActionsResult.actions; error = await actions.confirm();`. La differenza principale tra l’API [Payment Intents](https://docs.stripe.com/api/payment_intents.md) e l’API [Setup Intents](https://docs.stripe.com/api/setup_intents.md) è il loro scopo. Si utilizza l’API Payment Intents per riscuotere pagamenti ed effettuare addebiti immediati a un cliente. Crea un addebito ed elabora una transazione per riscuotere fondi. Si utilizza invece l’API Setup Intents per raccogliere e salvare i dati dei metodi di pagamento per uso futuro senza creare un addebito. Configura le credenziali di pagamento senza elaborare un pagamento. Poiché sia gli addebiti immediati che il salvataggio di un metodo di pagamento possono richiedere passaggi *asincroni* (Asynchronous refers to events happening at independent times in independent systems) da parte del cliente, queste API utilizzano lo stesso modello di macchina a stati. | API Payment Intents | API Setup Intents | | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | Crea un addebitare istantaneo | Crea nessun addebito | | Monitora il ciclo di vita di un pagamento | Monitora lo stato di avanzamento della configurazione di un metodo di pagamento | | Utilizza 3D Secure per autenticare il cliente per la transazione applicabile. | Utilizza 3D Secure per autenticare una modalità di pagamento senza addebiti e crea un mandato o un accordo per addebiti futuri | #### PaymentIntents Un PaymentIntent tiene traccia del ciclo di vita di un pagamento dalla creazione al checkout, attivando ulteriori passaggi di autenticazione quando necessario. ## Richiede un metodo di pagamento Dopo aver creato il PaymentIntent, il suo [stato](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-status) è `requires_payment_method` fino a quando non associ un [metodo di pagamento](https://docs.stripe.com/payments/payment-methods/overview.md). Crea il PaymentIntent non appena conosci l’importo da addebitare in modo che Stripe possa registrare tutti i tentativi di pagamento. ## Richiede conferma Dopo che il cliente ha fornito i dati di pagamento, il PaymentIntent entra nello stato `requires_confirmation` ed è pronto per la conferma. La maggior parte delle integrazioni ignora questo stato perché invia i dati del metodo di pagamento quando il pagamento viene confermato. ## Intervento necessario Se il pagamento richiede operazioni aggiuntive, ad esempio l’autenticazione con [3D Secure](https://docs.stripe.com/payments/3d-secure.md), lo stato del PaymentIntent è `requires_action`. > #### Modifiche dell'API > > Le versioni dell’API antecedenti la data [11-02-2019](https://docs.stripe.com/upgrades.md#2019-02-11) mostrano `requires_source` anziché `requires_payment_method` e `requires_source_action` anziché `requires_action`. ## In elaborazione Una volta gestite le operazioni necessarie, il PaymentIntent passa allo stato `processing` per i *metodi di pagamento asincroni* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed), ad esempio gli addebiti bancari. L’elaborazione di questi tipi di metodi di pagamento può richiedere alcuni giorni. Altri metodi di pagamento, come le carte, vengono elaborati più rapidamente e non passano allo stato `processing`. Se [autorizzi e acquisisci fondi](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md) separatamente, il PaymentIntent può passare allo stato `requires_capture`. In tal caso, il tentativo di acquisire i fondi passa allo stato `processing` o `succeeded` a seconda del metodo di pagamento. ## Riuscito Un PaymentIntent con stato di `succeeded` indica che il flusso di pagamento che sta generando è completo. I fondi sono ora nel tuo account e puoi evadere l’ordine in tutta sicurezza. Se devi rimborsare il cliente, puoi utilizzare l’API [Refunds](https://docs.stripe.com/api/refunds.md). Se il tentativo di pagamento non va a buon fine (ad esempio a causa di un pagamento rifiutato), lo stato del PaymentIntent torna a `requires_payment_method` in modo che il pagamento possa essere ritentato. ## Annullato Puoi annullare un PaymentIntent in qualsiasi momento prima che sia in stato di `processing` o `succeeded`. Se lo annulli, il PaymentIntent non sarà più valido per i tentativi di pagamento futuri e non potrà essere annullato. Se sono stati trattenuti fondi, l’annullamento li sblocca. Puoi annullare un PaymentIntent in stato di `processing` se il metodo di pagamento associato è [ACH](https://docs.stripe.com/payments/ach-direct-debit.md), [ACSS](https://docs.stripe.com/payments/acss-debit.md), [AU BECS](https://docs.stripe.com/payments/au-becs-debit.md), [BACS](https://docs.stripe.com/payments/payment-methods/bacs-debit.md), [NZ BECS](https://docs.stripe.com/payments/nz-bank-account.md) o [SEPA](https://docs.stripe.com/payments/sepa-debit.md). Tuttavia, potrebbe non andare a buon fine a causa di una finestra temporale di annullamento limitata e variabile. Inoltre, i PaymentIntent potrebbero passare automaticamente allo stato `canceled` dopo essere stati [confermati](https://docs.stripe.com/api/payment_intents/confirm.md) troppe volte. #### SetupIntent Un SetupIntent tiene traccia del ciclo di vita di un metodo di pagamento dalla creazione al checkout, attivando ulteriori passaggi di autenticazione quando necessario. ## Richiede un metodo di pagamento Quando viene creato il SetupIntent, il suo [stato](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) è `requires_payment_method` finché non viene associata una modalità di pagamento. ## Richiede conferma Dopo che il cliente ha fornito i dati relativi al metodo di pagamento, il SetupIntent passa allo stato `requires_confirmation` ed è pronto per la conferma. La maggior parte delle integrazioni salta questo stato perché invia i dati relativi al metodo di pagamento al momento della conferma del SetupIntent. ## Intervento necessario Se la configurazione richiede operazioni aggiuntive, ad esempio l’autenticazione con 3D Secure, lo stato del SetupIntent è `requires_action`. > #### Modifiche dell'API > > Le versioni dell’API antecedenti la data [11-02-2019](https://docs.stripe.com/upgrades.md#2019-02-11) mostrano `requires_source` anziché `requires_payment_method` e `requires_source_action` anziché `requires_action`. ## In elaborazione Dopo aver gestito le azioni richieste, SetupIntent passa allo stato `processing`. Sebbene alcuni metodi di pagamento (ad esempio le carte) possano essere elaborati rapidamente, l’elaborazione di altri metodi di pagamento può richiedere diversi giorni. ## Riuscito Un SetupIntent con stato `succeeded` indica che la configurazione è riuscita. Ora puoi associare questo metodo di pagamento a un oggetto Customer e utilizzare questo metodo di pagamento per i pagamenti futuri. Se la configurazione non va a buon fine, lo stato del SetupIntent torna a `requires_payment_method`. ## Annullato Puoi annullare un SetupIntent in qualsiasi momento prima che si trovi in uno stato `processing` o `successed`. Se lo annulli, il SetupIntent viene invalidato per i tentativi di configurazione futuri e non può essere annullato.