# Diferencia entre API Charges y API Payment Intents

Descubre las diferencias entre las dos API de pago principales 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 cual puedes redireccionar a tus clientes para compras 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) simples. Ofrece muchas funcionalidades, 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 de Stripe y métodos de pago. Te permite crear flujos de pago y experiencias personalizadas. Las nuevas funciones solo están disponibles con la API Payment Intents.

> #### Deprecated
> 
> Descontinuamos el uso de la API Charges para crear pagos con tarjeta y planeamos retirar el 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 con el fin de crear pagos.
> 
> La API Charges no admite las siguientes funcionalidades, 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 (SCA)](https://docs.stripe.com/strong-customer-authentication.md)

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

Si tienes una aplicación con múltiples 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 el objeto [Charge](https://docs.stripe.com/api/charges.md). A fin de ayudarte con esto, el objeto de cargo 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 con el propósito de 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 con la API Charges y 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 utilizando 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 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 completado o no la autenticación con 3D Secure | `charge.source.object == 'source' && charge.source.type == 'three_d_secure'` | `charge.payment_method_details.card.three_d_secure.succeeded` |
| Huella 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

- [Migra a Payment Intents](https://docs.stripe.com/payments/payment-intents/migration.md)
