# Eseguire la migrazione dell'integrazione di base della carta Esegui la migrazione a un'integrazione in grado di gestire richieste delle banche per l'autenticazione delle carte. Se hai rispettato la guida sui [pagamenti con carta senza autenticazione bancaria](https://docs.stripe.com/payments/without-card-authentication.md), la tua integrazione crea pagamenti che vengono rifiutati quando la banca chiede al cliente di autenticare l’acquisto. Se inizi a rilevare un discreto numero di pagamenti non andati a buon fine, come quello nella Dashboard di seguito, o associati al codice di errore `requires_action_not_handled` nell’API, aggiorna l’integrazione di base per gestirli anziché rifiutarli. ![Dashboard che mostra un pagamento non riuscito con l'indicazione che la banca ha richiesto l'autenticazione del pagamento](https://b.stripecdn.com/docs-statics-srv/assets/failed-payment-dashboard.9e22ec31f3c7063665911e26e389c5dc.png) Utilizza questa guida per scoprire come aggiornare l’integrazione creata con l’aiuto della guida precedente in modo da aggiungere codice lato server e client per chiedere al cliente di autenticare il pagamento mostrando una finestra modale. > Fai riferimento a un [esempio completo](https://github.com/stripe-samples/accept-a-payment/tree/master/custom-payment-flow) di questa integrazione su GitHub. ## Verifica se il pagamento richiede l'autenticazione [Lato server] Apporta due modifiche all’endpoint sul server che crea il PaymentIntent: 1. **Rimuovi** il parametro [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) in modo che i pagamenti che richiedono l’autenticazione non abbiano più esito negativo. Lo stato PaymentIntent diventa `requires_action`. 1. **Aggiungi** il parametro `confirmation_method` per indicare che vuoi riconfermare (manualmente) in modo esplicito il pagamento sul server dopo aver gestito le richieste di autenticazione. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d amount=1099 \ -d currency=usd \ -d payment_method_types[]=card \ -d confirm=true \-d payment_method="{{PAYMENT_METHOD_ID}}" \ -d confirmation_method=manual ``` Quindi aggiorna la funzione “generate response” per gestire lo stato `requires_action` affinché non venga generato un errore: #### curl ```bash # If the request succeeds, check the # PaymentIntent's `status` and handle # its `next_action`. ``` ## Chiedi al cliente di eseguire l'autenticazione [Lato client] Ora aggiorna il codice lato cliente per fare in modo che Stripe mostri una finestra modale se il cliente deve eseguire l’autenticazione. Usa [stripe.handleCardAction](https://docs.stripe.com/js.md#stripe-handle-card-action) quando un PaymentIntent ha lo stato `requires_action`. Se l’operazione va a buon fine, il PaymentIntent avrà lo stato `requires_confirmation` e dovrai confermare nuovamente il PaymentIntent sul server per completare il pagamento. ```javascript const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form} else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } } ``` ## Riconferma il PaymentIntent [Lato server] Utilizzando lo stesso endpoint configurato in precedenza, *riconferma* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) il PaymentIntent per finalizzare il pagamento ed evadere l’ordine. Il tentativo di pagamento non va a buon fine e torna allo stato `requires_payment_method` se la riconferma non avviene entro un’ora. #### curl ```bash curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u <>: \ -X "POST" ``` ## Testa l'integrazione Usa le nostre carte di test in una sandbox per verificare che l’integrazione sia stata aggiornata correttamente. Stripe visualizza una pagina di autenticazione fittizia all’interno del modale in una sandbox che consente di simulare un tentativo di autenticazione riuscito o non riuscito. In modalità live, la banca controlla l’interfaccia utente di ciò che viene visualizzato all’interno del modale. | Numero | Descrizione | | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | 4242424242424242 | La transazione ha esito positivo e il pagamento viene elaborato immediatamente. | | 4000000000009995 | La transazione ha sempre esito negativo con un codice di rifiuto `insufficient_funds`. | | 4000002500003155 | Richiede l’autenticazione, che in questa integrazione non andrà a buon fine restituendo il codice di rifiuto `authentication_not_handled`. |