# Diferencia entre las API Charges y Payment Intents Descubre las diferencias entre las dos API de pago principales de Stripe y cuándo utilizarlas. ## Cómo son las API de pago de Stripe Actualmente, existen tres formas de aceptar pagos en Stripe: - Stripe Checkout - API Charges - *API Payment Intents* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) es una página de pago prediseñada a la que puedes redireccionar a tu cliente para realizar compras sencillas y *suscripciones* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis). Ofrece muchas funciones, como Apple Pay, Google Pay, internacionalización y validación de formularios. La API [Charges](https://docs.stripe.com/api/charges.md) y la API [Payment Intents](https://docs.stripe.com/api/payment_intents.md) te permiten definir experiencias y flujos de pago personalizados. La API Payment Intents es la API que unifica todos los productos y métodos de pago de Stripe. Aunque no dejaremos de usar la API Charges, las nuevas funciones solo estarán disponibles en la API Payment Intents. Para ver un cuadro comparativo de todas las funciones, mira la tabla que aparece a continuación: | API Charges | API Payment Intents | | ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | La utilizan empresas con clientes principalmente de Estados Unidos y Canadá que buscan una forma sencilla de aceptar tarjetas. | Obligatorio para empresas que aceptan varios métodos de pago y tarjetas que exigen autenticación (por ejemplo, la *autenticación reforzada de clientes* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) en Europa). | | Funciona en la web, en iOS y en Android. | Funciona en la web, en iOS y en Android, y también puede utilizarse para aceptar pagos en la tienda con Terminal. | | Acepta tarjetas y todos los métodos de pago en la [API Sources](https://docs.stripe.com/sources.md). | Acepta tarjetas, tarjetas que requieren 3D Secure, iDEAL, SEPA y [muchos otros métodos de pago](https://docs.stripe.com/payments/payment-methods/overview.md). | | **no está lista para SCA** | *Está lista para SCA* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) | ## Cómo migrar el código que lee desde objetos Charge Si tienes una aplicación con varios flujos de pago y quieres migrar cada uno de ellos de forma gradual de la API Charges a la [API Payment Intents](https://docs.stripe.com/payments/payment-intents.md), primero debes actualizar el código que lea desde el objeto [Charge](https://docs.stripe.com/api/charges.md). Para facilitar la tarea, el objeto Charge tiene dos propiedades adicionales, [payment_method_details](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details) y [billing_details](https://docs.stripe.com/api/charges/object.md#charge_object-billing_details), que proporcionan una interfaz uniforme para leer los datos del método de pago utilizado para el cargo. Estos campos están disponibles en todas las versiones de la API y en los objetos Charge creados tanto con la API Charges como con la API Payment Intents. La siguiente tabla muestra las propiedades más utilizadas en un cargo y cómo se puede acceder a la misma información mediante las propiedades adicionales: #### Tarjetas y cuentas bancarias | Descripción | Antes de | Después de | | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | Detalles del método de pago utilizado para crear un cargo | `charge.source` | `charge.payment_method_details` | | ID del método de pago utilizado para el cargo | `charge.source.id` | `charge.payment_method` | | Tipo de método de pago utilizado | `charge.source.object` (por ejemplo, `card` o `bank_account`) | `charge.payment_method_details.type` | | Información de facturación para el cargo (por ejemplo, código postal de facturación) | `charge.source.address_zip` | `charge.billing_details.address.postal_code` | | Nombre del titular de la tarjeta | `charge.source.name` | `charge.billing_details.name` | | Últimos cuatro dígitos de la tarjeta utilizada | `charge.source.last4` | `charge.payment_method_details.card.last4` | | Huella digital de la tarjeta | `charge.source.fingerprint` | `charge.payment_method_details.card.fingerprint` | | Estado de la verificación del CVC para el cargo | `charge.source.cvc_check` | `charge.payment_method_details.card.checks.cvc_check` | | Valores de la marca de tarjeta | La propiedad `charge.source.brand` puede ser de `American Express`, `Diners Club`, `Discover`, `JCB`, `MasterCard`, `UnionPay`, `Visa` | La propiedad `charge.payment_method_details.card.brand` puede ser de `amex`, `diners`, `discover`, `jcb`, `mastercard`, `unionpay`, `visa` | | Valor de enumeración de Google Pay | La propiedad `charge.source.tokenization_method` es `android_pay` | La propiedad `card.wallet.type` dentro de `charge.payment_method_details` es `google_pay` | #### Sources | Descripción | Antes de | Después de | | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | Detalles del método de pago utilizado para crear un cargo | `charge.source` | `charge.payment_method_details` | | ID del método de pago utilizado para el cargo | `charge.source.id` (`charge.source.three_d_secure.card` si se utilizó la fuente 3D Secure) | `charge.payment_method` | | Tipo de método de pago utilizado | `charge.source.object == 'source' && charge.source.type` (a menos que `charge.source.type` sea `three_d_secure`) | `charge.payment_method_details.type` | | Información de facturación para el cargo (por ejemplo, código postal de facturación) | `charge.source.owner.address.postal_code` | `charge.billing_details.address.postal_code` | | Nombre del titular de la tarjeta | `charge.source.owner.name` | `charge.billing_details.name` | | Últimos cuatro dígitos de la tarjeta utilizada | `charge.source.card.last4` `charge.source.three_d_secure.last4` | `charge.payment_method_details.card.last4` | | Se haya realizado correctamente o no la autenticación mediante 3D Secure | `charge.source.object == 'source' && charge.source.type == 'three_d_secure'` | `charge.payment_method_details.card.three_d_secure.succeeded` | | Huella digital de la tarjeta | `charge.source.card.fingerprint` | `charge.payment_method_details.card.fingerprint` | | Estado de la verificación del CVC para el cargo | `charge.source.card.cvc_check` | `charge.payment_method_details.card.checks.cvc_check` | | Valores de la marca de tarjeta | La propiedad `charge.source.card.brand` puede ser de `American Express`, `Diners Club`, `Discover`, `JCB`, `MasterCard`, `UnionPay`, `Visa` | La propiedad `charge.payment_method_details.card.brand` puede ser de `amex`, `diners`, `discover`, `jcb`, `mastercard`, `unionpay`, `visa` | | Valor de enumeración de Google Pay | La propiedad `charge.source.card.tokenization_method` es `android_pay` | La propiedad `card.wallet.type` dentro de `charge.payment_method_details` es `google_pay` | ## See also - [Migrar a Payment Intents](https://docs.stripe.com/payments/payment-intents/migration.md)