# 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* (A low-code payment integration that creates a customizable form for collecting payments. You can embed Checkout directly in your website, redirect customers to a Stripe-hosted payment page, or create a customized checkout page with Stripe Elements)
- *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)
- API Charges (obsoleta para crear pagos)

[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 Payment Intents](https://docs.stripe.com/payments/payment-intents.md) es la API unificadora para todos los productos y métodos de pago de Stripe. Te permite crear flujos y experiencias de pago personalizados. Las nuevas funciones solo están disponibles con la API Payment Intents.

> #### Deprecated
> 
> Hemos marcado como obsoleto el uso de la API Charges para crear pagos con tarjeta y tenemos previsto dejar de ofrecerle soporte. Usa [Checkout](https://docs.stripe.com/payments/checkout.md) o [la API Payment Intents](https://docs.stripe.com/payments/payment-intents.md) en su lugar. Las nuevas integraciones no pueden usar la API Charges para crear pagos.
> 
> La API Charges no admite las siguientes funciones, muchas de las cuales son necesarias para cumplir con la normativa de las tarjetas de crédito:
> 
> - Empresas en la India
> - [Solicitudes bancarias para autenticación de tarjetas](https://docs.stripe.com/payments/cards/overview.md)
> - [Autenticación reforzada de clientes](https://docs.stripe.com/strong-customer-authentication.md)

## Cómo migrar el código que lee desde objetos Charge

Si tienes una aplicación con varios flujos de pago y los estás migrando de forma gradual de la API Charges a la API Payment Intents, primero debes actualizar cualquier código que lea desde el objeto [Charge](https://docs.stripe.com/api/charges.md). Para ayudarte con esto, 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 coherente para leer los detalles 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)
