# Migrar a la API Payment Intents > #### Funciones de integración de Payment Element > > Puedes integrarte con el Payment Element para gestionar suscripciones, impuestos, descuentos, envíos y conversión de divisas. Para obtener más información, consulta la guía [página Crear un proceso de compra](https://docs.stripe.com/payments/quickstart-checkout-sessions.md). Descubre cómo migrar tu integración de la API Charges y tus tarjetas actuales. Puede resultar abrumador migrar el flujo de pagos. Es más prudente adoptar progresivamente la API Payment Intents en paralelo con la API Charges. Para ello, puedes dividir la migración en los siguientes pasos: 1. [Actualiza la versión de tu 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 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 te aseguras de que la integración de lectura funcione tanto para la integración anterior de pagos como para la nueva. 1. Migra tu integración actual de la API de cargos 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 utilizar la API Payment Intents. 1. Migra tu 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 gestiona la autenticación correctamente. ## Actualiza tu versión de la 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` ha pasado a llamarse `requires_payment_method` - `requires_source_action` ha pasado a llamarse `requires_action` Además, si usas uno de nuestros [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 del 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 tu servidor. Esto ya no es necesario, ya que la función `confirmCardPayment`, llamada en el paso anterior, inicia la creación del cargo. ### Paso 4: Completar el pedido del cliente Con la confirmación automática, tu cargo se crea de forma asincrónica en función de la acción realizada por el cliente en su lado, por lo que debes [controlar los webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar si el pago se hace efectivo. Para llevar a cabo pasos como completar el pedido del cliente después de confirmarse que el pago se ha hecho efectivo, implementa soporte para webhooks y supervisa el evento `payment_intent.succeeded`. ### Before Si el cargo se hace efectivo, se completa el pedido. ### After Suscríbete al webhook `payment_intent.succeeded` y completa el pedido en el controlador de webhooks. Ahora que has hecho la migración, usa las tarjetas de prueba en la siguiente sección para verificar que la integración actualizada gestiona la autenticación mediante 3D Secure. #### Botón de solicitud de pago El [botón de solicitud de pago](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 También puedes usar el [Element de proceso de compra exprés](https://docs.stripe.com/elements/express-checkout-element.md) para ofrecer a tus clientes varios botones de pago de un solo clic, como 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 ha completado. Con el fin de adaptar esta integración para que sea compatible con la API Payment Intents, usa la función [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment) y pasa el ID del token en lugar de enviar el token a tu servidor. Una vez resuelta la promesa devuelta por la función `confirmCardPayment`, invoca 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 tu servidor. Esto ya no es necesario, ya que la función `confirmCardPayment`, llamada en el paso anterior, inicia la creación del cargo. ### Paso 4: Completar el pedido del cliente Con la confirmación automática, tu cargo se crea de forma asincrónica en función de la acción realizada por el cliente en su lado, por lo que debes [controlar los webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar si el pago se hace efectivo. Para llevar a cabo pasos como completar el pedido del cliente después de confirmarse que el pago se ha hecho efectivo, implementa soporte para webhooks y supervisa el evento `payment_intent.succeeded`. ### Before Si el cargo se hace efectivo, se completa el pedido. ### After Suscríbete al webhook `payment_intent.succeeded` y completa el pedido en el controlador de webhooks. Ahora que has hecho la migración, usa las tarjetas de prueba en la siguiente sección para verificar que la integración actualizada gestiona la autenticación mediante 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), que es la manera más rápida de aceptar pagos con Stripe. Con la nueva versión, puedes aceptar pagos puntuales y subscripciones. 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 del proceso de compra, cambia a [Elements](https://docs.stripe.com/payments/elements.md). Si te has actualizado a Elements, puedes crear una integración de la API Payment Intents utilizando 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 tu integración para recopilar la información de pago con Elements. Elements proporciona componentes de interfaz de usuario predefinidos y simplifica el [cumplimiento de la normativa PCI](https://docs.stripe.com/security/guide.md) con un informe SAQ A. Después de haber hecho la actualización a Elements, puedes crear una integración de la API Payment Intents usando 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 en el flujo de finalización de compra La integración de la API Payment Intents que recopila información de tarjetas en el 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) como `off_session` si principalmente tienes la intención de cobrar a los usuarios cuando están fuera de tu aplicación o como `on_session` si planeas cobrarles en la aplicación. Si tienes previsto utilizar la tarjeta para pagos durante y fuera de la sesión, utiliza `off_session`. Si proporcionas el parámetro `setup_future_usage` junto con un ID de cliente, el PaymentMethod resultante se guardará en 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 del 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 tu servidor. Esto ya no es necesario, ya que la función `confirmCardPayment`, llamada en el paso anterior, inicia la creación del cargo. ### Paso 4: Completar el pedido del cliente Con la confirmación automática, tu cargo se crea de forma asincrónica en función de la acción realizada por el cliente en su lado, por lo que debes [controlar los webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar si el pago se hace efectivo. Para llevar a cabo pasos como completar el pedido del cliente después de confirmarse que el pago se ha hecho efectivo, implementa soporte para webhooks y supervisa el evento `payment_intent.succeeded`. ### Before Si el cargo se hace efectivo, se completa el pedido. ### After Suscríbete al webhook `payment_intent.succeeded` y completa el pedido en el controlador de webhooks. Ahora que has hecho la migración, usa las tarjetas de prueba en la siguiente sección para verificar que la integración actualizada gestiona la autenticación mediante 3D Secure. #### Cómo guardar tarjetas fuera del flujo de finalización de compra Tendrás que hacer un par de cambios en tu integración actual para guardar datos de tarjeta fuera del flujo de finalización de compra. Primero, crea un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) en tu servidor. El SetupIntent autentica la tarjeta sin que se haga un pago inicial. Pasa el [secreto de cliente](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) de SetupIntent a tu cliente y usa 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) una vez que tu cliente haya introducido los datos de su tarjeta. Si la normativa lo exige, [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) le solicitará al usuario que autentique la tarjeta. Cuando [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) se completa correctamente, `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 previamente, debes especificar tanto el ID del objeto Customer como el ID del objeto Card, Source o PaymentMethod previamente guardado. Antes, si no se proporcionaba una fuente, se usaba la fuente predeterminada del cliente. Ahora, debes especificar explícitamente el método de pago deseado. Si el cliente está *fuera de 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 sesión. Consulta [Cargar tarjetas guardadas](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=elements#charge-saved-payment-method) para obtener más información. ## Acceder a métodos de pago guardados Para mostrar las Cards, Sources y PaymentMethods previamente guardados por el cliente, [enumera los métodos de pago](https://docs.stripe.com/api/payment_methods/list.md) en lugar de leer la propiedad [sources](https://docs.stripe.com/api/customers/object.md#customer_object-sources) del objeto del cliente. Esto es necesario porque los nuevos PaymentMethods añadidos a un cliente no se duplicarán en la propiedad sources del objeto Customer. ## Probar la integración Es importante que pruebes exhaustivamente la integración para asegurarte de que gestionas bien las tarjetas que requieren autenticación adicional 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 caducidad en el futuro y cualquier código CVC de tres dígitos para validar tu integración cuando se requiera autenticación y cuando no se requiera. | Número | Autenticación | Descripción | | ---------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 4000002500003155 | Exigido en la configuración o en la primera transacción | Esta tarjeta de prueba requiere la autenticación de los [pagos puntuales](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, ya no se necesitará realizar la autenticación. | | 4000002760003184 | Obligatorio | Esta tarjeta de prueba requiere la autenticación de todas las transacciones. | | 4000008260003178 | Obligatorio | Esta tarjeta de prueba requiere la autenticación, pero los pagos se rechazarán con el código de error `insufficient_funds` después de completarse correctamente la autenticación. | | 4000000000003055 | Aceptado | Esta tarjeta de prueba admite la autenticación mediante 3D Secure 2, pero no es obligatoria. Los pago realizados con esta tarjeta no requieren autenticación adicional en un entorno de prueba salvo petición de autenticación de las [reglas Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) de tu entorno de prueba. | Usa estas tarjetas en tu aplicación o en la [demo 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)