# Migra tu integración básica para tarjetas Migra a una integración que pueda gestionar las solicitudes bancarias de autenticación de tarjetas. Si seguiste la guía [Pagos con tarjeta sin autenticación bancaria](https://docs.stripe.com/payments/without-card-authentication.md), tu integración crea pagos que se rechazan cuando el banco solicita al cliente que autentique la compra. Si empiezas a ver numerosos pagos fallidos como el que se muestra en el Dashboard a continuación o con un código de error `requires_action_not_handled` en la API, actualiza tu integración básica para gestionar los pagos en lugar de rechazarlos. ![El Dashboard muestra un pago fallido en el que se indica que este banco solicitó autenticación para este pago](https://b.stripecdn.com/docs-statics-srv/assets/failed-payment-dashboard.9e22ec31f3c7063665911e26e389c5dc.png) Utilice esta guía para obtener información sobre cómo actualizar la integración que creó en la guía anterior con el fin de añadir código de servidor y de cliente para solicitar al cliente que abra un cuadro de diálogo para solicitar la autenticación del pago. > Consulta una [muestra completa](https://github.com/stripe-samples/accept-a-payment/tree/master/custom-payment-flow) de esta integración en GitHub. ## Comprueba si el pago requiere autenticación. [Lado del servidor] Haz dos cambios en el punto de conexión de tu servidor que crea el PaymentIntent: 1. **Elimina** el parámetro [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) para que ya no fallen los pagos que requieran autenticación. En su lugar, el estado del PaymentIntent cambia a `requires_action`. 1. **Añade** el parámetro `confirmation_method` para indicar que quieres volver a confirmar el pago de manera explícita (manualmente) en el servidor después de gestionar las peticiones de autenticación. #### 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 ``` Después, actualiza tu función «generar respuesta» para gestionar el estado `requires_action` en lugar de que se genere un error: #### curl ```bash # If the request succeeds, check the # PaymentIntent's `status` and handle # its `next_action`. ``` ## Pide al cliente que se autentique [Lado del cliente] A continuación, actualiza tu código de lado del cliente para indicarle a Stripe que muestre un cuadro de diálogo modal si el cliente necesita autenticación. Usa [stripe.handleCardAction](https://docs.stripe.com/js.md#stripe-handle-card-action) cuando el estado del PaymentIntent sea `requires_action`. Si se realiza correctamente, el estado del PaymentIntent será `requires_confirmation` y deberás volver a confirmar el PaymentIntent en tu servidor para finalizar el pago. ```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 } } ``` ## Confirma el nuevo el PaymentIntent [Lado del servidor] Utilizando el mismo punto de conexión que has configurado anteriormente , vuelve a *confirmar* (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) el PaymentIntent para finalizar el pago y completar el pedido. Si no se vuelve a confirmar en el término de una hora, el intento de pago falla y vuelve a `requires_payment_method`. #### curl ```bash curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u <>: \ -X "POST" ``` ## Prueba la integración Utiliza nuestras tarjetas en un entorno de prueba para verificar que tu integración se haya actualizado correctamente. Stripe muestra una página de autenticación simulada dentro del cuadro de diálogo en el entorno de prueba que te permite recrear un intento de autenticación que se realice con éxito o que falle. En modo activo, el banco controla la interfaz de usuario de lo que aparece dentro del cuadro de diálogo. | Número | Descripción | | ---------------- | ------------------------------------------------------------------------------------------------------------------------ | | 4242424242424242 | La transacción se realiza correctamente y el pago se procesa de inmediato. | | 4000000000009995 | Siempre da error con un código de rechazo `insufficient_funds`. | | 4000002500003155 | Requiere autenticación, por lo que en esta integración dará error con el código de rechazo `authentication_not_handled`. |