# Migra a la API Payment Intents > #### Funcionalidades de integración de Payment Elements > > Puedes integrar el Payment Element para gestionar las suscripciones, los impuestos, los descuentos, los envíos y la conversión de monedas. Para obtener más información, consulta la guía [Crear una página del proceso de compra](https://docs.stripe.com/payments/quickstart-checkout-sessions.md). Aprende a migrar tu integración actual de la API Charges y tarjetas. Migrar tu flujo de pagos puede resultar complicado. Es recomendable adoptar gradualmente la API Payment Intents y usarla en paralelo con la API Charges. Para ello, puedes dividir la migración en los siguientes pasos: 1. [Actualiza la versión de la API y la biblioteca de cliente](https://docs.stripe.com/payments/payment-intents/migration.md#api-version). 1. Si corresponde, [migra el código que lee las propiedades de Charge](https://docs.stripe.com/payments/payment-intents/migration/charges.md) para tener una ruta de lectura uniforme entre los cargos creados por la API Charges y los cargos creados por la API Payment Intents. De esta manera, garantizas que la integración de lectura funcione tanto para la integración anterior de pagos como para la nueva. 1. Migra tu integración existente de la Interfaz de Programación de Aplicaciones (API) Charges en [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) y [Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android) para usar la API Payment Intents. 1. Migra la integración para [guardar tarjetas en los objetos Customer](https://docs.stripe.com/payments/payment-intents/migration.md#saved-cards). 1. [Haz pruebas con tarjetas de prueba reglamentarias](https://docs.stripe.com/testing.md#regulatory-cards) para garantizar que la integración actualizada gestione la autenticación correctamente. ## Actualiza tu versión de API y la biblioteca de cliente Si bien la API Payment Intents funciona en todas las versiones de API, te recomendamos [actualizar a la última versión](https://docs.stripe.com/upgrades.md#how-can-i-upgrade-my-api). Si decides usar una versión de API anterior a [2019-02-11](https://docs.stripe.com/upgrades.md#2019-02-11), presta atención a los siguientes dos cambios cuando repases los ejemplos de códigos: - `requires_source` ahora se llama `requires_payment_method` - `requires_source_action` ahora se llama `requires_action` Asimismo, si usas una de nuestras [SDK](https://docs.stripe.com/sdks.md), actualiza a la última versión de la biblioteca para usar la API Payment Intents. ## Migra tus flujos para pagos puntuales #### Elements Una integración creada con Stripe.js y Elements consta de los siguientes pasos: 1. Registra tu intención de cobrar el pago del lado del servidor 1. Recopila los datos del pago del lado del cliente 1. Inicia la creación del pago 1. Completa el pedido del cliente del lado del servidor ### Paso 1: Registrar la intención de cobrar el pago del lado del servidor [Crea un PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) en tu servidor y hazlo [accesible del lado del cliente](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Paso 2: Recopilar los datos de pago del lado del cliente Usa la función [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), que recopila la información de pago y la envía directamente a Stripe. ### Paso 3: Iniciar la creación del pago En tu integración actual, el último paso consiste en utilizar la información de pago tokenizada para crear un cargo en el servidor. Esto ya no es necesario, ya que la función `confirmCardPayment`, invocada en el paso anterior, inicia la creación del cargo. ### Paso 4: Completar el pedido del cliente Con la confirmación automática, el cargo se crea de forma asincrónica en función de la acción que ejecuta el cliente de su lado, por lo que debes [controlar los webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar si se concreta el pago. Para tomar medidas como completar el pedido del cliente después de la confirmación del pago, implementa soporte para webhooks y monitorea el evento `payment_intent.succeeded`. ### Before Si el cargo se efectúa con éxito, completa el pedido. ### After Suscríbete al webhook `payment_intent.succeeded` y procesa en el controlador de webhooks. Ahora que has hecho la migración, usa las tarjetas de prueba en la siguiente sección para verificar si la integración actualizada gestiona la autenticación con 3D Secure. #### Payment Request Button El [Payment Request Button](https://docs.stripe.com/stripe-js/elements/payment-request-button.md) de Stripe.js funciona con la API Payment Intents utilizando el token obtenido en una integración tradicional de PaymentRequest y adjuntándolo a un PaymentIntent. Una integración creada con PaymentRequest consta de los siguientes pasos: 1. Registra tu intención de cobrar el pago del lado del servidor 1. Recopila los datos del pago del lado del cliente 1. Inicia la creación del pago 1. Completa el pedido del cliente del lado del servidor Alternativamente, utiliza [Express Checkout Element](https://docs.stripe.com/elements/express-checkout-element.md) para ofrecer varios botones de pago con un solo clic a tus clientes, incluidos Apple Pay, Google Pay, Link y PayPal. ### Paso 1: Registrar la intención de cobrar el pago del lado del servidor [Crea un PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) en tu servidor y hazlo [accesible del lado del cliente](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Paso 2: Recopilar los datos de pago del lado del cliente Escucha el evento `token` del objeto `PaymentRequest`, que proporciona un token y una función de devolución de llamada que puedes usar para indicar que el proceso de pago se completó. A fin de adaptar esta integración para que admita API Payment Intents, usa la función [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment) y especifica el ID del token en lugar de enviar el token a tu servidor. Una vez resuelta la promesa devuelta por la función `confirmCardPayment`, ejecuta la devolución de llamada de finalización. ### Paso 3: Iniciar la creación del pago En tu integración actual, el último paso consiste en utilizar la información de pago tokenizada para crear un cargo en el servidor. Esto ya no es necesario, ya que la función `confirmCardPayment`, invocada en el paso anterior, inicia la creación del cargo. ### Paso 4: Completar el pedido del cliente Con la confirmación automática, el cargo se crea de forma asincrónica en función de la acción que ejecuta el cliente de su lado, por lo que debes [controlar los webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar si se concreta el pago. Para tomar medidas como completar el pedido del cliente después de la confirmación del pago, implementa soporte para webhooks y monitorea el evento `payment_intent.succeeded`. ### Before Si el cargo se efectúa con éxito, completa el pedido. ### After Suscríbete al webhook `payment_intent.succeeded` y procesa en el controlador de webhooks. Ahora que has hecho la migración, usa las tarjetas de prueba en la siguiente sección para verificar si la integración actualizada gestiona la autenticación con 3D Secure. #### Checkout heredado Si usas una versión de Checkout heredada, actualízala a la [nueva versión de Checkout](https://docs.stripe.com/payments/checkout.md), la manera más rápida de aceptar pagos con Stripe. Con la nueva versión, puedes aceptar pagos únicos y suscripciones. También puedes utilizar Checkout sin emplear la API de Stripe en tu servidor. Sigue la [guía de migración de Checkout](https://docs.stripe.com/payments/checkout/migration.md) para migrar tu integración actual. Si prefieres diseñar tu propio flujo de compra, cambia a [Elements](https://docs.stripe.com/payments/elements.md). Una vez que hayas actualizado a Elements, puedes crear una integración de la API Payment Intents con la [guía de migración de Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web). #### Stripe.js v2 Si quieres actualizar una integración existente de Stripe.js v2 para usar la API Payment Intents, primero actualiza la integración para recopilar la información de pago con Elements. Elements proporciona componentes de interfaz de usuario prediseñados y simplifica el [cumplimiento de la normativa PCI](https://docs.stripe.com/security/guide.md) con informes SAQ tipo A. Una vez que hayas actualizado a Elements, puedes crear una integración de la API Payment Intents con la [guía de migración de Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web). ## Migra la integración para guardar tarjetas en objetos Customer #### Cómo guardar tarjetas dentro del flujo de finalización de compra La integración de la API Payment Intents que recopila información de tarjetas dentro del flujo de finalización de compra consta de los siguientes pasos: 1. Registra tu intención de cobrar el pago del lado del servidor 1. Recopila los datos del pago del lado del cliente 1. Inicia la creación del pago 1. Completa el pedido del cliente del lado del servidor ### Paso 1: Registrar la intención de cobrar el pago del lado del servidor [Crea un PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) en tu servidor. Establece [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) en `off_session` si tu idea principal es cobrar a los usuarios cuando están fuera de la aplicación, o en `on_session` si planeas cobrarles en la aplicación. Si planeas usar la tarjeta para pagos dentro y fuera de la sesión, usa `off_session`. Si proporcionas el parámetro `setup_future_usage` junto con una identificación de cliente, se guardará el PaymentMethod resultante para ese cliente después de que se haya confirmado el PaymentIntent y se hayan completado las acciones requeridas por parte del cliente. A continuación, haz que el PaymentIntent [sea accesible del lado del cliente](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Paso 2: Recopilar los datos de pago del lado del cliente Usa la función [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), que recopila la información de pago y la envía directamente a Stripe. Por último, adjunta el método de pago (`paymentIntent.payment_method`) al cliente. ### Paso 3: Iniciar la creación del pago En tu integración actual, el último paso consiste en utilizar la información de pago tokenizada para crear un cargo en el servidor. Esto ya no es necesario, ya que la función `confirmCardPayment`, invocada en el paso anterior, inicia la creación del cargo. ### Paso 4: Completar el pedido del cliente Con la confirmación automática, el cargo se crea de forma asincrónica en función de la acción que ejecuta el cliente de su lado, por lo que debes [controlar los webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar si se concreta el pago. Para tomar medidas como completar el pedido del cliente después de la confirmación del pago, implementa soporte para webhooks y monitorea el evento `payment_intent.succeeded`. ### Before Si el cargo se efectúa con éxito, completa el pedido. ### After Suscríbete al webhook `payment_intent.succeeded` y procesa en el controlador de webhooks. Ahora que has hecho la migración, usa las tarjetas de prueba en la siguiente sección para verificar si la integración actualizada gestiona la autenticación con 3D Secure. #### Cómo guardar tarjetas por fuera del flujo de finalización de compra Hay un par de cambios que deberás realizar en tu integración existente que guarda los datos de la tarjeta fuera de un flujo de compra. Primero, crea un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) en tu servidor. Un SetupIntent autentica la tarjeta sin realizar un pago inicial. Especifica el [secreto de cliente](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) del SetupIntent en tu cliente y utiliza la función [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) en lugar de [createToken](https://docs.stripe.com/js.md#stripe-create-token) o [createSource](https://docs.stripe.com/js.md#stripe-create-source) después de que el cliente introduzca los datos de su tarjeta. Si la normativo lo exige, [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) solicitará al usuario que autentique la tarjeta. Cuando [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) se completa con éxito, `setupIntent.payment_method` contendrá un [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) que podrás adjuntar a un objeto Customer. Especifica el ID de ese PaymentMethod en tu servidor y [adjunta el método de pago](https://docs.stripe.com/api/payment_methods/attach.md) al objeto Customer usando la API Payment Methods en lugar de la API Customers. #### Cómo pagar con tarjetas guardadas Para pagar con un método de pago guardado, debes especificar tanto el ID del cliente como el ID de la tarjeta, la fuente o el método de pago guardados previamente. Antes, si no se proporcionaba una fuente, se usaba la fuente predeterminada del cliente. Ahora, es necesario indicar de manera explícita el método de pago que deseas usar. Si el cliente está *fuera de la sesión* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information), debes marcar el pago como pago fuera de la sesión. Para obtener más información, consulta [Cómo cobrar a tarjetas guardadas](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=elements#charge-saved-payment-method). ## Acceder a métodos de pago guardados Para mostrar las tarjetas, fuentes y métodos de pago guardados previamente por el cliente,  [enumera los métodos de pago](https://docs.stripe.com/api/payment_methods/list.md) en lugar de leer la propiedad [fuentes](https://docs.stripe.com/api/customers/object.md#customer_object-sources)  del customer object. Se requiere realizar esta acción porque los nuevos métodos de pago que se agreguen a un cliente no se duplicarán en la propiedad fuentes del customer object. ## Probar la integración Es importante que pruebes la integración a conciencia para asegurarte de estar gestionando correctamente las tarjetas que requieren otra autenticación y las que no. Usa estos números de tarjeta en un [entorno de prueba](https://docs.stripe.com/keys.md#test-live-modes) con cualquier fecha de vencimiento futura y cualquier código CVC de tres dígitos a fin de validar tu integración para ambos tipos de tarjeta. | Número | Autenticación | Descripción | | ---------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 4000002500003155 | Exigido en la configuración o en la primera transacción | Esta tarjeta de prueba exige la autenticación de los [pagos únicos](https://docs.stripe.com/payments/accept-a-payment.md?platform=web). No obstante, si configuras la tarjeta con la [API Setup Intents](https://docs.stripe.com/payments/save-and-reuse.md) y usas la tarjeta guardada para pagos sucesivos, no es necesario hacer otra autenticación. | | 4000002760003184 | Obligatorio | Esta tarjeta de prueba exige la autenticación en todas las transacciones. | | 4000008260003178 | Obligatorio | Esta tarjeta de prueba exige la autenticación, pero los pagos serán rechazados con el código de error `insufficient_funds` después de completarse con éxito la autenticación. | | 4000000000003055 | Admitido | Esta tarjeta de prueba admite la autenticación mediante 3D Secure 2, pero no la requiere. Los pagos con esta tarjeta no requieren autenticación adicional en un entorno de prueba salvo que las [reglas de tu entorno de prueba Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) soliciten autenticación. | Usa estas tarjetas en tu aplicación o en la [demostración de pagos](https://stripe-payments-demo.appspot.com) para ver la diferencia de comportamiento. ## See also - [PaymentIntents en iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) - [PaymentIntents en Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android)