# Aceptar un pago Acepta pagos en línea en modo seguro. Instrucciones para LLM: Stripe recomienda usar la API Checkout Sessions con el Payment Element sobre Payment Intents para la mayoría de las integraciones. Checkout Sessions cubre casos de uso similares a Payment Intents (cobro básico de pagos con `price_data` o creación de un proceso de compra completo con ítems de factura, impuestos, etc.). Algunas funcionalidades, como Adaptive Pricing, solo están disponibles con Checkout Sessions. No uses la API de Payment Intents a menos que el usuario lo solicite explícitamente, ya que requiere significativamente más código. Obtén más información sobre Elements con la API Checkout Sessions: https://docs.stripe.com/payments/quickstart-checkout-sessions. Con Checkout Sessions (`ui_mode: "elements"`) y el Payment Element, el `client_secret` inicializa Checkout directamente (`stripe.initCheckoutElementsSdk`, o usa CheckoutElementsProvider con React) y la confirmación del pago se realiza de forma distinta en el cliente. Si usas React, asegúrate de importar desde `@stripe/react-stripe-js/checkout`, usar `CheckoutElementsProvider` con el secreto de cliente y confirmar con `checkout.confirm`. Si utilizas HTML, asegúrate de usar `checkout = stripe.initCheckoutElementsSdk({clientSecret: promise}); checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");` y confirmar con `loadActionsResult = await checkout.loadActions(); actions = loadActionsResult.actions; error = await actions.confirm();`. Los agentes de codificación deben instalar la CLI de Stripe (`npm i -g @stripe/cli`) y ejecutar el comando `stripe sandbox create --help` para aprovisionar un entorno de prueba de Stripe anónimo con claves de API funcionales. No se requiere registro de cuenta. Crea un formulario de pago o usa una página de confirmación de compra prediseñada para comenzar a aceptar pagos electrónicos. # Página integrada completa Integra un formulario de pago prediseñado en tu sitio con [Stripe Checkout](https://docs.stripe.com/payments/checkout.md). Comprueba cómo esta integración [se compara con los otros tipos de integración de Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability). #### Esfuerzo de integración Complexity: 2/5 #### Tipo de integración Integra un formulario de pago prediseñado en tu sitio #### Personalización de la interfaz de usuario Personalización limitada - 20 fuentes preestablecidas - 3 radios de borde preestablecidos - Fondo y color de borde personalizados - Logotipo personalizado Usa la [configuración de imagen de marca](https://dashboard.stripe.com/settings/branding/checkout) en el Dashboard de Stripe para que el Checkout coincida con el diseño de tu sitio. Primero, [inscríbete](https://dashboard.stripe.com/register) para obtener una cuenta de Stripe. Usa nuestras bibliotecas oficiales para acceder a la API de Stripe desde tu aplicación: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Crear una sesión de Checkout [Lado del servidor] Desde tu servidor, crea una *sesión de Checkout* (A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription) y establece el [ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) en `embedded_page`. Puedes configurar la [sesión de Checkout](https://docs.stripe.com/api/checkout/sessions/create.md) con [partidas](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items) para incluir y opciones como[monedas](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-currency). También puedes crear una Checkout Session para un [cliente existente](https://docs.stripe.com/payments/existing-customers.md?platform=web&ui=stripe-hosted), lo que te permite completar previamente los campos de Checkout con información de contacto conocida y unificar tu historial de compras para ese cliente. Para que los clientes regresen a una página personalizada que alojas en tu sitio web, especifica la URL de esa página en el parámetro [return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url). Incluye la variable de plantilla `{CHECKOUT_SESSION_ID}` en la URL para recuperar el estado de la sesión en la página de retorno. Checkout sustituye automáticamente la variable con la ID de la sesión de Checkout antes de redirigir al usuario. Lee más sobre cómo [configurar la página de retorno](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=embedded-page#return-page) y otras opciones para [personalizar el comportamiento de redirección](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-page). Después de crear la sesión de Checkout, usa el código `client_secret` que se devolvió en la respuesta para [montar Checkout](https://docs.stripe.com/payments/accept-a-payment.md#mount-checkout). #### Ruby ```ruby # This example sets up an endpoint using the Sinatra framework. require 'json' require 'sinatra' require 'stripe' # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. client = Stripe::StripeClient.new('<>') post '/create-checkout-session' do session = client.v1.checkout.sessions.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt', }, unit_amount: 2000, }, quantity: 1, }], mode: 'payment',ui_mode: 'embedded_page', return_url: 'https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}' }) {clientSecret: session.client_secret}.to_json end ``` ## Incorporar Checkout [Lado del cliente] #### HTML + JS Checkout está disponible como parte de [Stripe.js](https://docs.stripe.com/js.md). Incluye el script de Stripe.js en tu página agregándolo al encabezado de tu archivo HTML. A continuación, crea un nodo DOM vacío (contenedor) para usarlo en el montaje. ```html
``` Inicializa Stripe.js con la clave publicable de tu API. Crea una función `fetchClientSecret` asincrónica que haga una solicitud a tu servidor para crear la sesión de Checkout y recuperar el secreto de cliente. Pasa esta función a `options` al crear la instancia de Checkout: ```javascript // Initialize Stripe.js const stripe = Stripe('<>'); initialize(); // Fetch Checkout Session and retrieve the client secret async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Initialize Checkout const checkout = await stripe.createEmbeddedCheckoutPage({ fetchClientSecret, }); // Mount Checkout checkout.mount('#checkout'); } ``` #### React Instala [react-stripe-js](https://docs.stripe.com/sdks/stripejs-react.md) y el cargador Stripe.js desde npm: ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` Para utilizar el componente Embedded Checkout, crea un `EmbeddedCheckoutProvider`. Llama a `loadStripe` con tu clave de API publicable y pasa la `Promise` devuelta al proveedor. Crea una función `fetchClientSecret` asíncrona que haga una solicitud a tu servidor para que cree la sesión de Checkout y recupere el secreto de cliente. Pasa esta función al accesorio `options` aceptado por el proveedor. ```jsx import * as React from 'react'; import {loadStripe} from '@stripe/stripe-js'; import { EmbeddedCheckoutProvider, EmbeddedCheckout } from '@stripe/react-stripe-js'; // Make sure to call `loadStripe` outside of a component's render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('pk_test_123'); const App = () => { const fetchClientSecret = React.useCallback(() => { // Create a Checkout Session return fetch("/create-checkout-session", { method: "POST", }) .then((res) => res.json()) .then((data) => data.clientSecret); }, []); const options = {fetchClientSecret}; return (
) } ``` Checkout se representa en un iframe que envía la información del pago a Stripe en modo seguro a través de una conexión HTTPS. > Evita colocar Checkout en otro iframe, ya que algunos métodos de pago requieren un redireccionamiento a otra página para confirmar el pago. ### Personaliza el aspecto Para personalizar Checkout y que coincida con el diseño de tu sitio, establece el color de fondo, el color del botón, el radio del borde y las fuentes en la [configuración de marca](https://dashboard.stripe.com/settings/branding) de tu cuenta. De forma predeterminada, Checkout procesa sin relleno o margen externos. Te recomendamos usar un elemento contenedor como un div para aplicar el margen deseado (por ejemplo, 16 px en todos los lados). ## Mostrar página de devolución Después de que el cliente intenta realizar un pago, Stripe lo redirige a una página de retorno que alojas en tu sitio. Cuando creaste la sesión de Checkout, especificaste la URL de la página de retorno en el parámetro [return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url). Lee más sobre otras opciones para [personalizar el comportamiento de redirección](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-page). Cuando muestres tu página de retorno, recupera el estado de la sesión de Checkout con el ID de sesión de Checkout en la URL. Gestiona el resultado de acuerdo con el estado de la sesión de la siguiente manera: - `complete`: el pago se efectuó correctamente. Usa la información de la sesión de Checkout para mostrar una página que indique que el pago se realizó correctamente. - `open`: el pago falló o se canceló. Vuelve a montar Checkout para que tu cliente pueda volver a intentarlo. #### Ruby ```ruby require 'stripe' # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. client = Stripe::StripeClient.new('<>') get '/session-status' do session = client.v1.checkout.sessions.retrieve(params[:session_id]) {status: session.status, customer_email: session.customer_details.email}.to_json end ``` ```javascript const session = await fetch(`/session_status?session_id=${session_id}`) if (session.status == 'open') { // Remount embedded Checkout } else if (session.status == 'complete') { // Show success page // Optionally use session.payment_status or session.customer_email // to customize the success page } ``` #### Métodos de pago basados en redirecciones Durante el proceso de pago, algunos métodos de pago redirigen al cliente a una página intermedia, como una página de autorización bancaria. Cuando completan esa página, Stripe los redirige a tu página de retorno. Obtén más información sobre los [métodos de pago basados en redirección y este comportamiento](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-page#redirect-based-payment-methods). ## Administra eventos posteriores al pago Stripe envía un evento [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) cuando un cliente completa un pago de la Checkout Session. Usa la [herramienta de webhooks del Dashboard](https://dashboard.stripe.com/webhooks) o sigue la [guía de webhooks](https://docs.stripe.com/webhooks/quickstart.md) para recibir y gestionar estos eventos, que podrían hacer que hagas lo siguiente: - Envía un correo electrónico de confirmación del pedido a tu cliente. - Registra la venta en una base de datos. - Inicia el flujo de tareas de envío. Escucha los eventos en lugar de esperar a que tu cliente sea redirigido a tu sitio web. Activar la gestión logística únicamente desde tu página de éxito de Checkout es poco confiable. Obtén más información en nuestra [guía de gestión logística para Checkout](https://docs.stripe.com/checkout/fulfillment.md). ## Prueba tu integración Para probar la integración de tu formulario de pago integrado, realiza lo siguiente: 1. Crea una Checkout Session integrada y monta el formulario de pago en tu página. 2. Completa los datos del pago con un método de la siguiente tabla. - Ingresa una fecha futura como fecha de vencimiento de la tarjeta. - Ingresa cualquier número de 3 dígitos como CVC. - Ingresa un código postal de facturación. 3. Haz clic en **Pagar**. Te redirigiremos a tu `return_url`. 4. Ve al Dashboard y busca el pago en la [página de Transacciones](https://dashboard.stripe.com/test/payments?status%5B0%5D=successful). Si tu pago se efectuó correctamente, lo verás en esa lista. 5. Haz clic en tu pago a fin de ver más detalles, como un resumen de Checkout con la información de facturación y la lista de artículos comprados. Puedes usar esta información para completar el pedido. Obtén más información sobre cómo [probar tu integración](https://docs.stripe.com/testing.md). #### Tarjetas | Número de tarjeta | Escenario | Cómo hacer la prueba | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | El pago con tarjeta se efectúa correctamente y no requiere autenticación. | Completa el formulario de tarjeta de crédito con el número de tarjeta de crédito y la fecha de vencimiento, el CVC o el código postal. | | 4000002500003155 | El pago con tarjeta requiere *autenticación* (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). | Completa el formulario de tarjeta de crédito con el número de tarjeta de crédito y la fecha de vencimiento, el CVC o el código postal. | | 4000000000009995 | La tarjeta es rechazada con un código de rechazo `insufficient_funds`. | Completa el formulario de tarjeta de crédito con el número de tarjeta de crédito y la fecha de vencimiento, el CVC o el código postal. | | 6205500000000000004 | La tarjeta UnionPay puede tener entre 13 y 19 dígitos. | Completa el formulario de tarjeta de crédito con el número de tarjeta de crédito y la fecha de vencimiento, el CVC o el código postal. | #### Billeteras | Método de pago | Escenario | Cómo hacer la prueba | | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Alipay | Tu cliente realiza un pago correctamente con un método de pago basado en redireccionamiento y con [notificación inmediata](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Elige cualquier método de pago basado en redireccionamiento, completa los datos solicitados y confirma el pago. Luego, haz click en **Completar pago de prueba** en la página de redireccionamiento. | #### Redireccionamientos bancarios | Método de pago | Escenario | Cómo hacer la prueba | | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Débito directo BECS | Tu cliente paga satisfactoriamente con débito directo BECS. | Completa el formulario con el número de cuenta `900123456` y BSB `000000`. El PaymentIntent confirmado pasa en un principio al estado `processing` y, 3 minutos más tarde, a `succeeded`. | | Débito directo BECS | El pago de tu cliente falla con un código de error `account_closed`. | Completa el formulario con el número de cuenta `111111113` y BSB `000000`. | | Bancontact, EPS, iDEAL y Przelewy24 | Tu cliente no pasa la autenticación en la página de redireccionamiento de un método de pago basado en redireccionamiento y con notificación inmediata. | Elige cualquier método de pago basado en redireccionamiento, completa los datos solicitados y confirma el pago. Luego, haz click en **Error en el pago de prueba** en la página de redireccionamiento. | | Pay by Bank | Tu cliente paga satisfactoriamente con un método de pago basado en redireccionamiento y con [notificación diferida](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Elige el método de pago, completa los datos solicitados y confirma el pago. Luego, haz click en **Completar el pago de prueba** en la página de redireccionamiento. | | Pay by Bank | Tu cliente no pasa la autenticación en la página de redireccionamiento de un método de pago basado en redireccionamiento y con notificación diferida. | Elige el método de pago, completa los datos solicitados y confirma el pago. Luego, haz click en **Error en el pago de prueba** en la página de redireccionamiento. | | BLIK | Los pagos BLIK generan errores de varias maneras: errores inmediatos (por ejemplo, el código venció o no es válido), errores demorados (el banco lo rechaza) o tiempos de espera (el cliente no respondió a tiempo). | Usa patrones de correo electrónico para [simular los diferentes errores.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Débitos bancarios | Método de pago | Escenario | Cómo hacer la prueba | | ------------------- | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Débito directo SEPA | Tu cliente paga satisfactoriamente con débito directo SEPA. | Completa el formulario con el número de cuenta `AT321904300235473204`. El PaymentIntent confirmado pasa inicialmente al estado “en proceso” y, tres minutos más tarde, a “completado”. | | Débito directo SEPA | El estado del intento de pago de tu cliente pasa de `processing` a `requires_payment_method`. | Completa el formulario con el número de cuenta `AT861904300235473202`. | #### Vales | Método de pago | Escenario | Cómo hacer la prueba | | -------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------- | | Boleto, OXXO | Tu cliente paga con un vale Boleto u OXXO. | Selecciona Boleto u OXXO como método de pago y envía el pago. Cierra el diálogo después de que aparezca. | Consulta [Pruebas](https://docs.stripe.com/testing.md) para obtener información adicional para probar tu integración. ## Optional: Agrega más métodos de pago De forma predeterminada, Checkout [admite muchos métodos de pago](https://docs.stripe.com/payments/payment-methods/integration-options.md#choose-how-to-add-payment-methods). Tienes que tomar medidas adicionales para habilitar y mostrar algunos métodos, como Apple Pay, Google Pay y los métodos de comprar ahora y pagar después. ### Apple Pay y Google Pay Para aceptar pagos de Apple Pay y Google Pay, debes hacer lo siguiente: - Habilítalos en tu [configuración de métodos de pago](https://dashboard.stripe.com/settings/payment_methods). Apple Pay está habilitado de forma predeterminada. - Entrega el contenido de tu aplicación a través de HTTPS durante el desarrollo y la producción. - [Registra tu dominio](https://docs.stripe.com/payments/payment-methods/pmd-registration.md). - Entrega el contenido de tu aplicación a través de HTTPS durante el desarrollo y la producción. Puedes usar un servicio como [ngrok](https://ngrok.com/) para servir tu aplicación para pruebas locales. Además, una sesión de Checkout solo muestra el botón de Apple Pay a los clientes cuando se cumplen *todas* las siguientes condiciones: - El dispositivo del cliente está ejecutando la versión 17 de macOS o posterior o la versión 17 de iOS o posterior. - El cliente usa el navegador Safari. - El cliente tiene una tarjeta válida registrada en Apple Pay. Una sesión de Checkout solo muestra el botón de Google Pay a los clientes cuando se cumplen *todas* las siguientes condiciones: - El dispositivo del cliente ejecuta Chrome 61 o una versión posterior. - El cliente tiene una tarjeta válida registrada en Google Pay. > #### Pruebas regionales > > Stripe Checkout no admite Apple Pay ni Google Pay para cuentas o clientes de Stripe en India. Si tu dirección IP está en la India, no puedes probar tu integración con Apple Pay o Google Pay, incluso si la cuenta de Stripe está fuera de la India. ## Optional: Crear productos y precios Antes de crear una sesión de Checkout, puedes crear *productos* (Products represent what your business sells—whether that's a good or a service) y *precios* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) por adelantado. Utiliza productos para representar diferentes bienes físicos o niveles de servicio, y *precios* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) para representar los precios de cada producto. Puedes [configurar tu sesión de Checkout](https://docs.stripe.com/payments/checkout/pay-what-you-want.md) para aceptar propinas y donaciones, o vender productos y servicios de pagos a voluntad. Por ejemplo, puedes crear una camiseta como producto con un precio de USD 20. Esto te permite actualizar y agregar precios sin necesidad de cambiar los detalles de tus productos subyacentes. Puedes crear productos y precios con el Dashboard de Stripe o la API. Obtén más información sobre [cómo funcionan los productos y los precios](https://docs.stripe.com/products-prices/how-products-and-prices-work.md). #### API La API solo necesita un `name` para crear un [Producto](https://docs.stripe.com/api/products.md). Checkout muestra los atributos `name`, `description` e `images` que indiques para el producto. ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d name=T-shirt ``` A continuación, crea un [precio](https://docs.stripe.com/api/prices.md) para definir cuánto cobrar por tu producto. Esto incluye cuánto cuesta el producto y qué moneda usar. ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "product={{PRODUCT_ID}}" \ -d unit_amount=2000 \ -d currency=usd ``` #### Dashboard > Copia los productos creados en un entorno de prueba al modo activo para que no tengas que volver a crearlos. En la vista detallada de Productos del Dashboard, haz clic en **Copiar al modo activo** en la esquina superior derecha. Puedes copiar el mismo producto del entorno de prueba al modo activo más de una vez. Cada copia crea un producto activo independiente, y las actualizaciones posteriores al producto del entorno de prueba no se reflejan en las copias reales existentes. Asegúrate de estar en un entorno de prueba al hacer clic en **Entornos de prueba** dentro del selector de cuentas del Dashboard. A continuación, define los artículos que quieres vender. Para crear un nuevo producto y precio: - Entra en la sección [Productos](https://dashboard.stripe.com/test/products) del Dashboard. - Haz click en **Agregar producto**. - Selecciona **Por única vez** al establecer el precio. Checkout muestra el nombre, la descripción y las imágenes del producto que indiques. Cada precio que creas tiene un ID. Cuando crees una Checkout Session, haz referencia al ID del precio y a la cantidad. Si vendes en múltiples monedas, haz que tu Precio *sea en múltiples monedas* (A single Price object can support multiple currencies. Each purchase uses one of the supported currencies for the Price, depending on how you use the Price in your integration). Checkout automáticamente [determina la moneda local del cliente](https://docs.stripe.com/payments/checkout/localize-prices/manual-currency-prices.md) y presenta esa moneda si el Precio la admite. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" ``` ## Optional: Completar los datos del cliente automáticamente [Lado del servidor] Si ya tienes el correo electrónico del cliente y quieres completarlo automáticamente en la sesión de Checkout, especifica [customer_email](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_email) cuando crees una sesión de Checkout. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ --data-urlencode "customer_email=customer@example.com" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" ``` ## Optional: Guardar datos de métodos de pago [Lado del servidor] De forma predeterminada, los métodos de pago utilizados para realizar pagos únicos con Checkout no están disponibles para su uso futuro. ### Guarda los métodos de pago para cargarlos fuera de sesión Puedes configurar Checkout para que guarde los métodos de pago utilizados para realizar un pago único especificando el argumento [payment_intent_data.setup_future_usage](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-setup_future_usage). Esta opción es útil si necesitas capturar un método de pago en el archivo para usarlo en comisiones futuras, como comisiones de cancelación o de no presentación. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer_creation=always \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" \ -d "payment_intent_data[setup_future_usage]=off_session" ``` Si utilizas Checkout en modo `subscription`, Stripe guarda automáticamente el método de pago para cobrar pagos posteriores. Los métodos de pago con tarjeta guardados para clientes mediante `setup_future_usage` o el modo`subscription` no aparecen para las compras posteriores en Checkout (más información a continuación). Te recomendamos que utilices [texto personalizado](https://docs.stripe.com/payments/checkout/custom-components.md#customize-text) con enlaces a las condiciones pertinentes sobre el uso de la información de pago guardada. > Las leyes mundiales sobre privacidad son complicadas y están llenas de matices. Te recomendamos que te comuniques con tu equipo legal y de privacidad antes de implementar [setup_future_usage](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-setup_future_usage) ya que podría afectar a tu marco existente de cumplimiento de la normativa de privacidad. Consulta [la guía emitida por la Junta Europea de Protección](https://edpb.europa.eu/system/files/2021-05/recommendations022021_on_storage_of_credit_card_data_en_1.pdf) para obtener más información sobre cómo guardar los datos de pago. ### Guarda los métodos de pago para completarlos previamente en Checkout De forma predeterminada, el proceso de compra utiliza [Link](https://docs.stripe.com/payments/link/checkout-link.md) para ofrecer a tus clientes la opción de guardar y reutilizar su información de pago de forma segura. Si prefieres administrar los métodos de pago tú mismo, utiliza [saved_pago_method_options.pago_method_save](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-payment_method_save) al crear una sesión de proceso de compra para permitir que tus clientes guarden sus métodos de pago para futuras compras en proceso de compra. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer_creation=always \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" \ -d "saved_payment_method_options[payment_method_save]=enabled" ``` Si pasas este parámetro ya sea en modo de [pago](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) o [suscripción](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode), se muestra una casilla de verificación opcional que les permite a los clientes guardar explícitamente su método de pago para futuras compras. Cuando los clientes marcan esta casilla, Checkout guarda el método de pago con [allow_redisplay: always](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay). Checkout usa este parámetro para determinar si un método de pago puede completarse previamente en futuras compras. Al usar `saved_payment_method_options.payment_method_save`, no necesitas especificar `setup_future_usage` para guardar el método de pago. > #### Usa la API Accounts v2 para representar a los clientes > > La API Accounts v2 suele estar disponible para usuarios Connect y en versión preliminar pública para otros usuarios de Stripe. Si eres parte de la versión preliminar Accounts v2, debes especificar una [versión preliminar](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) en tu código. > > Con el propósito de unirte a la versión preliminar Accounts v2, ve a las [versiones preliminares y funcionalidades de la cuenta](https://dashboard.stripe.com/settings/previews) en tu Dashboard y habilita **Métodos de pago reutilizables para Global Payouts**. > > Para la mayoría de los casos de uso, te recomendamos que[modeles a tus clientes como objetos Account configurados por el cliente](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) en lugar de usar objetos [Customer](https://docs.stripe.com/api/customers.md). El uso de [saved_payment_method_options.payment_method_save](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-payment_method_save) requiere un objeto para representar a tu cliente (`Account` configurada por el cliente o `Customer`). Para guardar un cliente nuevo, establece la función [customer_creation](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_creation) de la sesión de Checkout en `siempre`. De lo contrario, no se guardará el cliente ni el método de pago en la sesión. Si no se especifica `payment_method_save` o si el cliente no acepta guardar el método de pago, Checkout aún guardará los métodos de pago creados en modo `subscription` o con `setup_future_usage`. Estos métodos de pago tienen un valor `allow_redisplay` de `limited`, lo que evita que se completen previamente para la devolución de compras y te permite cumplir con las reglas de la red de tarjetas y las normativas de protección de datos. Aprende a [cambiar el comportamiento predeterminado habilitado por estos modos](https://support.stripe.com/questions/prefilling-saved-cards-in-checkout) y a cambiar o anular el comportamiento `allow_redisplay`. > Puedes usar Checkout para guardar tarjetas y otros métodos de pago para cargarlos fuera de la sesión, pero Checkout solo completa automáticamente las tarjetas guardadas. Obtén información sobre cómo [completar automáticamente las tarjetas guardadas](https://support.stripe.com/questions/prefilling-saved-cards-in-checkout). Para guardar un método de pago sin un pago inicial, [usa Checkout en modo de configuración](https://docs.stripe.com/payments/save-and-reuse.md?platform=checkout). ### Permitir a los clientes eliminar métodos de pago guardados Para permitir que tus clientes eliminen un método de pago guardado de modo que no vuelva a aparecer en pagos futuros, usa [saved_payment_method_options.payment_method_remove](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-payment_method_remove) cuando crees una Checkout Session. #### Accounts v2 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" \ -d "saved_payment_method_options[payment_method_remove]=enabled" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" \ -d "saved_payment_method_options[payment_method_remove]=enabled" ``` El cliente no puede eliminar un método de pago si está vinculado a una suscripción activa y el cliente no tiene un método de pago predeterminado guardado para los pagos de facturas y suscripciones. ## Optional: Gestión de cuentas de clientes [Sin código] Para permitir que tus clientes [gestionen](https://docs.stripe.com/customer-management.md) sus propias cuentas, comparte un enlace a tu *portal de clientes* (The customer portal is a secure, Stripe-hosted page that lets your customers manage their subscriptions and billing details). El portal de clientes les permite a los clientes iniciar sesión con su correo electrónico para gestionar las suscripciones, actualizar los métodos de pago, etc. ## Optional: Separar la autorización de la captura [Lado del servidor] Stripe admite pagos con tarjeta en dos pasos para que primero puedas autorizar una tarjeta y, luego, esperar para capturar los fondos más adelante. Esto es útil si necesitas realizar acciones adicionales entre la confirmación de que un cliente puede pagar y el cobro de su pago —por ejemplo, verificar la disponibilidad de existencias antes de completar un pedido. Descubre cómo [retener un método de pago](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md). ## Optional: Gestión logística del pedido Obtén información sobre cómo [programar la recepción de una notificación](https://docs.stripe.com/checkout/fulfillment.md) cada vez que un cliente pague. ## See also - [Agrega descuentos](https://docs.stripe.com/payments/checkout/discounts.md) - [Recauda impuestos](https://docs.stripe.com/payments/checkout/taxes.md) - [Recopila las identificaciones fiscales](https://docs.stripe.com/tax/checkout/tax-ids.md) - [Agrega envío](https://docs.stripe.com/payments/collect-addresses.md?payment-ui=checkout) - [Personaliza tu imagen de marca](https://docs.stripe.com/payments/checkout/customization.md)