# Cómo funcionan PaymentIntents y SetupIntents Descubre cómo funcionan PaymentIntents y SetupIntents dentro del flujo de pago. Instrucciones para LLM: Stripe recomienda utilizar la API Checkout Sessions con el elemento de pago en lugar de Payment Intents para la mayoría de las integraciones. Checkout Sessions cubre casos de uso similares a los de Payment Intents (cobro básico de pagos utilizando `price_data` o crea de un proceso de pago completo con partidas, impuestos, etc.). Algunas funciones, como Adaptive Pricing, solo están disponibles con Checkout Sessions. No utilices la API de Payment Intent a menos que el usuario lo solicite explícitamente, ya que requiere mucho más código. Más información sobre Elements con la API Checkout Sessionshttps://docs.stripe.com/payments/quickstart-checkout-sessions. Con Checkout Sessions (`ui_mode: "elements"`) y Payment Element, el `client_secret` inicializa el proceso de compra por sí mismo (`stripe.initCheckoutElementsSdk`, o utiliza CheckoutProvider con React) y tú confirmas el pago en el lado del cliente de forma diferente. Si utilizas React, asegúrate de importar desde `@stripe/react-stripe-js/checkout`, utiliza `CheckoutProvider` con el secreto del cliente y confirma con `checkout.confirm`. Si utilizas HTML, asegúrate de utiliza `checkout = stripe.initCheckoutElementsSdk({clientSecret: promise}); checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");` y confirma con `loadActionsResult = await checkout.loadActions(); actions = loadActionsResult.actions; error = await actions.confirm();`. La principal diferencia entre la API [Payment Intents ](https://docs.stripe.com/api/payment_intents.md) y la API [Setup Intents](https://docs.stripe.com/api/setup_intents.md) es su propósito. Usas la API Payment Intents para recaudar y aceptar pagos de los clientes inmediatamente. Crea un cobro y procesa un transacción para cobrar fondos. Usas la API Setup Intents, por otro lado, para cobrar y guardar los detalles del método para pagar y así poder utilizarlo en el futuro sin crear un cargo. Configura las credenciales para pagar sin procesar un pago. Dado que tanto los cargos inmediatos como el ahorro de un método de pago pueden requerir *pasos asíncronos* (Asynchronous refers to events happening at independent times in independent systems) para el cliente, estas API utilizan el mismo patrón de diseño State. | API Payment Intents | API Setup Intents | | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | Crea un cargo inmediato | No crea ningún cargo | | Hace un seguimiento del ciclo de vida del pago | Hace un seguimiento del progreso de la configuración de un método de pago | | Utiliza 3D Secure para autenticar al cliente para la transacción correspondiente | Utiliza 3D Secure para autenticar un método de pago sin cobrarle, y crea un mandato o acuerdo para cargos futuros | #### PaymentIntents Un PaymentIntent rastrea el ciclo de vida de un pago desde la creación hasta el proceso de compra, activando pasos adicionales de autenticación cuando es necesario. ## Requiere un método de pago Después de crear el Paymentintent, su [estatus](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-status) es`requires_payment_method` hasta que adjuntes un [método de pagos](https://docs.stripe.com/payments/payment-methods/overview.md). Crear el Paymentintent tan pronto como sepas la cantidad a cobrar para que Stripe pueda registrar todos los intentos de pago. ## Requiere confirmación Después de que tu cliente proporcione información de pago, el PaymentIntent entra en el estatus `requires_confirmation` y estará listo para confirmar. La mayoría de las integraciones se saltan este estatus porque presentan información sobre el método para pagar cuando se confirma el pago. ## Requiere una acción Si el pago requiere acciones adicionales, como autenticarse con[3D Seguro](https://docs.stripe.com/payments/3d-secure.md), el PaymentIntent tiene un estatus de`requires_action`. > #### Cambios a la API > > Versiones de la API antes del [02-11-2019](https://docs.stripe.com/upgrades.md#2019-02-11) muestran `requires_source` en lugar de`requires_pago_method` y`requires_source_action` en lugar de`requires_action`. ## Procesamiento en curso Una vez cumplidas las acciones requeridas, el PaymentIntent cambia al estado `processing` para los *métodos de pago asíncronos* (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), como los adeudos bancarios. Este tipo de métodos de pago pueden tardar varios días en procesarse. Otros métodos de pago, como las tarjetas, se procesan más rápidamente y no pasan al estado `processing`. Si vas a [autorizar y capturar fondos](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md) por separado, tu PaymentIntent puede pasar a `requires_capture`. En ese caso, al intentar capturar los fondos, pasará a `processing` o `succeeded`, dependiendo del método de pagos. ## Completado correctamente Un PaymentIntent con un estatus de `éxito` significa que el flujo de pago en curso está completo. Los fondos ya están en tu cuenta y puedes finalizar el pedido con confianza. Si necesitas hacer un reembolso al cliente, puedes usar la API [Refunds](https://docs.stripe.com/api/refunds.md). Si el intento de pago falla (por ejemplo, debido a un pago rechazado), el estatus de PaymentIntent vuelve a `requires_payment_method` para que el pago pueda intentarse de nuevo. ## Cancelada Puedes cancelar un PaymentIntent en cualquier momento antes de que esté en estatus de `procesándose` o`éxito`. Cancelarlo invalida el PaymentIntent para futuros intentos de pago y no se puede deshacer. Si se han retenido fondos, la cancelación los libera. Puedes cancelar un PaymentIntent en estatus de `procesándose` cuando el método de pago asociado es[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). Sin embargo, podría fallar debido a una ventana de cancelación limitada y variable. Los PaymentIntents también podrían pasar automáticamente al estado `canceled` después de haber sido [confirmados](https://docs.stripe.com/api/payment_intents/confirm.md) demasiadas veces. #### SetupIntents Un SetupIntent rastrea el ciclo de vida de un método para pagar desde la creación hasta el proceso de compra, activando pasos adicionales de autenticación cuando es necesario. ## Requiere un método de pago Cuando se crea un SetupIntent, el [estatus](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) es `requires_payment_method` hasta que se asocia un método de pago. ## Requiere confirmación Después de que tu cliente proporcione información de su método de pagos, el SetupIntent entra en el estatus `requires_confirmation` y estará listo para confirmar. La mayoría de las integraciones se saltan este estatus porque presentan información sobre el método de pagos cuando se confirma el SetupIntent. ## Requiere una acción Si la configuración requiere acciones adicionales, como la autenticación mediante 3D Secure, el estatus de SetupIntent es `requires_action`. > #### Cambios a la API > > Versiones de la API antes del [02-11-2019](https://docs.stripe.com/upgrades.md#2019-02-11) muestran `requires_source` en lugar de`requires_pago_method` y`requires_source_action` en lugar de`requires_action`. ## Procesamiento en curso Una vez cumplidas las acciones requeridas, el SetupIntent cambia a `processing`. Aunque el procesamiento con algunos métodos de pago (por ejemplo, tarjetas) puede ser rápido, con otros pueden tardar varios días. ## Completado correctamente Un SetupIntent con un estatus de`éxito` significa que la configuración es exitosa. Ya puedes adjuntar este método para pagar a un objeto personalizado y usar este método de pago para pagos futuros. Si la configuración falla, el estatus del SetupIntent vuelve a `requires_pago_method`. ## Cancelada Puedes cancelar un SetupIntent en cualquier momento antes de que esté en un estatus de `procesándose` o`éxito`. Cancelarlo invalida el SetupIntent para futuros intentos de configuración y no se puede deshacer.