# Aceptar una transferencia bancaria Utiliza la API Payment Intents para aceptar pagos con transferencia bancaria. La primera vez que aceptas un pago mediante transferencia bancaria de un cliente, Stripe genera una cuenta bancaria virtual para ese cliente, que luego puedes compartir con esa persona directamente. Todos los pagos futuros con transferencia bancaria de ese cliente se envían a esta cuenta bancaria. En algunos países, Stripe también te proporciona un número de referencia para transferencias exclusivo que tu cliente debe incluir en cada transferencia a fin de facilitar la comparación entre la transferencia y los pagos pendientes. En algunos países hay límites en la cantidad de números de cuentas bancarias virtuales que puedes crear gratis. Puedes encontrar un resumen de los pasos más comunes para aceptar un pago mediante transferencia bancaria en el siguiente diagrama de secuencia: #### Con facturas Pasos habituales para aceptar un pago mediante transferencia bancaria (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) #### Sin facturas ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-1.a17fe04695ef532427f25a9e1276ee2e.svg) ## Manejo de pagos insuficientes y sobrepagos Con los pagos por transferencia bancaria, es posible que el cliente te envíe más o menos del monto de pago esperado. Si envía muy poco, Stripe cubre parcialmente los fondos en un intento de pago abierto. Las facturas no tendrán fondos parciales y permanecerán abiertas hasta que los fondos entrantes cubran el monto total de la factura. Si el cliente envía más de la cantidad esperada, Stripe intenta conciliar los fondos entrantes con un pago abierto y mantener el monto excedente en el saldo del cliente. Obtén más información sobre [cómo Stripe maneja la conciliación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Con facturas Cuando un cliente paga un importe inferior: Un cliente envío una transferencia bancaria con un importe inferior al previsto (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) Cuando un cliente paga un importe superior: Un cliente envío una transferencia bancaria con un importe superior al previsto (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) #### Sin facturas ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-2.464fe916d5822422144c8aea0f31ed45.svg) ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-3.b1992851a5f3492d14eaa35e336b0e9f.svg) ## Cómo gestionar varias facturas o pagos abiertos Puedes tener varias facturas o pagos abiertos que se pueden saldar con una transferencia bancaria. Según la configuración predeterminada, Stripe hará el intento de [conciliar automáticamente](https://docs.stripe.com/payments/customer-balance/reconciliation.md) la transferencia bancaria utilizando datos como el código de referencia de la transferencia o el importe transferido. Puedes deshabilitar la conciliación automática y [conciliar manualmente](https://docs.stripe.com/payments/customer-balance/reconciliation.md#cash-manual-reconciliation) pagos y facturas tú mismo. Puedes omitir el comportamiento de conciliación automática por cliente configurando el [modo de conciliación](https://docs.stripe.com/api/customers/create.md#create_customer-cash_balance-settings-reconciliation_mode) en manual. # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=checkout. > Stripe puede mostrar automáticamente a tus clientes los métodos de pago relevantes, ya que considera la moneda, las restricciones de los métodos de pago y otros parámetros. > > - Sigue la guía [Aceptar un pago](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=stripe-hosted) para crear una integración de Checkout que utilice [métodos de pago dinámicos](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md). - Si no quieres usar métodos de pago dinámicos, sigue los pasos a continuación para configurar manualmente los métodos de pago en tu integración de Checkout. Dentro de Checkout, la transferencia bancaria es un método de pago de [un solo uso](https://docs.stripe.com/payments/payment-methods.md#usage) mediante el que los clientes transfieren fondos siguiendo las instrucciones de pago recibidas. Al seleccionar pagar, el usuario es redirigido a una página alojada que muestra las instrucciones para la transferencia bancaria y el estado del pago mediante transferencia. La transferencia bancaria también es un *método de pago con notificación diferida* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods), es decir, los fondos no están disponibles de inmediato después del pago. > Las transferencias bancarias no están disponibles en las sesiones de Checkout que no incluyeron un [“Customer Object”](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer) existente como parte de la solicitud de creación de la sesión. ## Determinar compatibilidad **Ubicaciones comerciales admitidas**: Europe (SEPA area), UK, JP, MX, US **Monedas admitidas**: `eur, gbp, jpy, mxn, usd` **Monedas de pago**: `eur, gbp, jpy, mxn, usd` **Modo de pago**: Yes **Modo configuración**: No **Modo suscripción**: No La sesión de Checkout debe cumplir las siguientes condiciones para aceptar Bank Transfer pagos: - Los *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) de todos los ítems de factura deben estar expresados en la misma moneda. Si tienes ítems en otras monedas, crea sesiones de Checkout separadas para cada moneda. - Solo puedes utilizar ítems únicos (las sesiones de Checkout para transferencias bancarias no aceptan planes de *suscripción* (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) recurrentes). ## Aceptar un pago > Crea una integración para [aceptar un pago](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout) con Checkout antes de usar esta guía. Usa esta guía para habilitar Bank Transfer. ### Crear o recuperar un objeto Customer Debes asociar un objeto [Customer](https://docs.stripe.com/api/customers.md) para conciliar cada pago mediante transferencia bancaria. Si ya tienes un “Customer Object”, puedes omitir este paso. De lo contrario, crea un nuevo “Customer Object”. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ### Habilitar Bank Transfer como método de pago Al crear una nueva [sesión de Checkout](https://docs.stripe.com/api/checkout/sessions.md), debes: 1. Configurar `customer` 1. Agregar `customer_balance` a la lista de `payment_method_types` 1. Verifica que todos los `line_items` usen la misma moneda. #### EE. UU. ```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 "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=us_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` #### RU ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=gbp" \ -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 "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=gb_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` #### UE ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=eur" \ -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 "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=eu_bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]=FR" \ --data-urlencode "success_url=https://example.com/success" ``` Establece [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) en uno de los valores de para mostrar el IBAN localizado al cliente. #### JP ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=jpy" \ -d "line_items[0][price_data][product_data][name]=Tシャツ" \ -d "line_items[0][price_data][unit_amount]=19000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=jp_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` #### MX ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=mxn" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=18000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=mx_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` ### Redireccionamiento a la página alojada de instrucciones para transferencias bancarias de Stripe > A diferencia de los pagos con tarjeta, cuando el cliente hace un pago con transferencia bancaria, no siempre se lo redirige a la [success_url](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-success_url). Después de *enviar* (Submitting an order indicates that the customer intends to pay. Upon submission, the order can no longer be updated and is ready for payment) satisfactoriamente el formulario de Checkout, - Si el cliente ya tiene saldo suficiente para cubrir el importe solicitado, el pago se efectúa de inmediato y se redirige al cliente a la [success_url](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-success_url). - Si el saldo del cliente no es suficiente para cubrir el importe solicitado, se redirige al cliente a la [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url). La página contiene las instrucciones para guiar al cliente en el proceso de transferencia. Stripe permite la personalización de las interfaces de usuario del cliente en la página [configuración de imagen de marca](https://dashboard.stripe.com/account/branding). Se puede aplicar la siguiente configuración de imagen de marca a la página de instrucciones alojada: - **Ícono**: tu imagen de marca y el nombre público de la empresa - **Color de la marca**: se utiliza como color de fondo ### Completa los pedidos Debido a que la transferencia bancaria es una *modalidad de pago con notificación diferida* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods), tienes que usar un método como los *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) para monitorear el estado del pago y manejar la*gestión logística* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) del pedido. Obtén más información sobre [cómo configurar webhooks y completar pedidos](https://docs.stripe.com/checkout/fulfillment.md). Los siguientes eventos se envían cuando cambia el estado del pago: | Nombre del evento | Descripción | Próximos pasos | | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | El cliente ha enviado correctamente el formulario de Checkout y ha sido remitido a `hosted_instructions_url`. | Espera a que el cliente haga la transferencia bancaria. | | [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | El cliente ha efectuado la transferencia bancaria con éxito. El `PaymentIntent` pasa a `succeeded`. | Entrega los bienes o servicios que el cliente compró. | ## Optional: Enviar correos electrónicos con instrucciones de pago Puedes habilitar los correos electrónicos con instrucciones de pago para transferencias bancarias desde el [Dashboard](https://dashboard.stripe.com/settings/emails). Después de hacerlo, Stripe le enviará a tu cliente un correo electrónico en los siguientes casos: - Se confirma un PaymentIntent, pero el cliente no tiene saldo suficiente. - El cliente envía una transferencia bancaria, pero no tiene fondos suficientes para completar los pagos pendientes. Los correos electrónicos con instrucciones de pago para transferencias bancarias contienen el importe adeudado, la información bancaria para transferir los fondos y un enlace a la página de instrucciones alojada en Stripe. > En el entorno de prueba, los correos electrónicos con instrucciones de pago solo se envían a las direcciones de correo vinculadas a la cuenta de Stripe. ## Prueba tu integración Puedes probar tu integración simulando una transferencia bancaria entrante con la API, a través del Dashboard o con una versión beta de la CLI de Stripe. #### Dashboard Para simular una transferencia bancaria utilizando el Dashboard en un *entorno de prueba* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vaya a la página del cliente en el Dashboard. En **Métodos de pago**, haga clic en **Añadir** y seleccione **Saldo de fondos (solo para pruebas)**. #### API Para simular una transferencia bancaria con la API, sigue estos pasos: #### EE. UU. ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="usd" ``` #### Reino Unido ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="gbp" ``` #### UE ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="eur" ``` #### Japón ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "amount"="1000" \ -d "currency"="jpy" ``` #### MX ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="123456" \ -d "amount"="1000" \ -d "currency"="mxn" ``` #### CLI de Stripe Para simular una transferencia bancaria con la CLI de Stripe, sigue estos pasos: 1. [Instala la CLI de Stripe](https://docs.stripe.com/stripe-cli.md). 1. Inicia sesión en la CLI con la misma cuenta con la que iniciaste sesión en el Dashboard de Stripe. ```bash stripe login ``` 1. Simula una transferencia bancaria entrante para un cliente existente. #### EE. UU. ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=usd ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. #### Reino Unido ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=gbp ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. #### UE ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=eur ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. #### Japón ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1000 \ --currency=jpy ``` #### MX ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=123456 \ --currency=mxn ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. ## See also - [Cumplimiento del proceso de compra](https://docs.stripe.com/checkout/fulfillment.md) - [Cómo personalizar Checkout](https://docs.stripe.com/payments/checkout/customization.md) # Elements > This is a Elements for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=elements. ## Configurar Stripe [Lado del servidor] Primero, necesitas una cuenta de Stripe. [Inscríbete ahora](https://dashboard.stripe.com/register). 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 o recuperar un objeto Customer [Lado del servidor] Debes asociar un objeto [Customer](https://docs.stripe.com/api/customers.md) para conciliar cada pago mediante transferencia bancaria. Si ya tienes un “Customer Object”, puedes omitir este paso. De lo contrario, crea un nuevo “Customer Object”. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Crear un PaymentIntent [Lado del servidor] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) es un objeto que representa tu intención de cobrar a un cliente y hace el seguimiento del ciclo de vida del proceso de pago en cada etapa. Crea un PaymentIntent de lado del servidor y especifica el importe y la moneda del cobro. También debes completar el [parámetro customer](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) de la solicitud de creación del PaymentIntent. Las transferencias bancarias no están disponibles en PaymentIntents sin un cliente. #### Gestionar los métodos de pago desde el Dashboard Antes de crear un Payment Intent, asegúrate de activar **Transferencia bancaria** en la página de [configuración de métodos de pago](https://dashboard.stripe.com/settings/payment_methods) de tu Dashboard. > Con los [métodos de pago dinámicos](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), Stripe gestiona la devolución de los métodos de pago elegibles en función de factores como el importe de la transacción, la moneda y el flujo de pagos. #### Estados Unidos ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" ``` #### Reino Unido ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=gbp \ -d "automatic_payment_methods[enabled]=true" ``` #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=eur \ -d "automatic_payment_methods[enabled]=true" ``` Para localizar el IBAN que se muestra al cliente, puedes configurar el país del cliente estableciendo la propiedad [`address.country`](https://docs.stripe.com/api/customers/object.md#customer_object-address-country) o [editando el objeto Customer en el Dashboard](https://docs.stripe.com/invoicing/customer.md#edit-a-customer). Admitimos la localización del IBAN para : - Si no configuraste un país para tu cliente, o si su país no admite la localización del Código Internacional de Cuenta Bancaria (IBAN), de manera predeterminada, usamos el país de tu cuenta de Stripe. - Si la ubicación del IBAN no se admite para el país de tu cuenta de Stripe, de forma predeterminada, usaremos `IE`. > En este momento, la creación de nuevos números de cuentas bancarias virtuales localizados no está disponible para España (ES). En cambio, usa cualquiera de los otros países de VBAN de la UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=jpy \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" ``` #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=mxn \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" ``` En la última versión de la API, especificar el parámetro `automatic_payment_methods` es opcional porque Stripe habilita su funcionalidad de forma predeterminada. Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Enumerar métodos de pago manualmente Para especificar manualmente los métodos de pago con la API, agrega `customer_balance` a la lista de [tipos de métodos de pago](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) de tu PaymentIntent. Especifica la [id](https://docs.stripe.com/api/customers/object.md#customer_object-id) del objeto Customer. #### Estados Unidos ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=us_bank_transfer" ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `us_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. #### Reino Unido ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=gbp \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=gb_bank_transfer" ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `gb_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=eu_bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]=FR" ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `eu_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. - Establece [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) como uno de los . El IBAN que se muestra al cliente está localizado para el país elegido. > En este momento, la creación de nuevos números de cuentas bancarias virtuales localizados no está disponible para España (ES). En cambio, usa cualquiera de los otros países de VBAN de la UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d currency=jpy \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=jp_bank_transfer" ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `jp_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=mxn \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=mx_bank_transfer" ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `mx_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. > Especifica siempre el `payment_method_types` al crear un pago. No puedes usar `customer_balance` para [pagos futuros](https://docs.stripe.com/payments/save-and-reuse.md). ## Recopilar datos de pago [Lado del cliente] Recopila los datos de pago del cliente con el [Payment Element](https://docs.stripe.com/payments/payment-element.md). Payment Element es un componente de interfaz de usuario prediseñado que simplifica la recopilación de datos de pago para una variedad de métodos de pago. El Payment Element contiene un iframe que envía la información de pago a Stripe de manera segura mediante una conexión HTTPS. No coloques el Payment Element dentro de otro iframe porque, para algunos métodos de pago, se requiere la redirección a otra página para la confirmación del pago. Si optas por usar un iframe y quieres aceptar Apple Pay o Google Pay, el iframe debe tener el atributo [allow](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) establecido en `«payment*»`. Para que la integración funcione, la dirección de la página del proceso de compra debe empezar con `https://` rather en lugar de `http://` for. Puedes probar tu integración sin usar HTTPS, pero recuerda [habilitarla](https://docs.stripe.com/security/guide.md#tls) cuando todo esté listo para aceptar pagos activos. #### HTML + JS ### Configurar Stripe.js El Payment Element se encuentra disponible automáticamente como funcionalidad de Stripe.js. Incluye el script de Stripe.js en tu página de finalización de compra agregándolo al `head` de tu archivo HTML. Siempre debes cargar Stripe.js directamente desde js.stripe.com para cumplir con la normativa PCI. No incluyas el script en un paquete ni alojes una copia en tus sistemas. ```html Checkout ``` Crea una instancia de Stripe con el siguiente código JavaScript en tu página de pago: ```javascript // Set your publishable key: remember to change this to your live publishable key in production // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>'); ``` ### Agrega el Payment Element a tu página de pago El Payment Element necesita un lugar específico en tu página de pago. Crea un nodo DOM vacío (contenedor) con un ID único en tu formulario de pago: ```html
``` Cuando se cargue el formulario anterior, crea una instancia de Payment Element y móntala en el nodo DOM del contenedor. Especifica el [secreto de cliente](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) del paso anterior en `options` cuando crees la instancia [Elements](https://docs.stripe.com/js/elements_object/create): Debes administrar el secreto de cliente con cuidado porque sirve para completar el cargo. No lo registres, no lo insertes en direcciones URL ni lo expongas a nadie que no sea el cliente. ```javascript const options = { clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous stepconst elements = stripe.elements(options); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element'); ``` #### React ### Configurar Stripe.js Instala [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) y el [cargador de Stripe.js](https://www.npmjs.com/package/@stripe/stripe-js) desde el registro público de npm: ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` ### Agrega y configura el proveedor Elements en tu página de pago Para usar el componente Payment Element, envuelve el componente de tu página de confirmación de compra con un [proveedor Elements](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Llama a `loadStripe` con tu clave publicable y especifica el valor `Promise` devuelto en el proveedor `Elements`. También debes especificar el [secreto de cliente](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) del paso anterior como `options` al proveedor `Elements`. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); function App() { const options = { // passing the client secret obtained in step 3 clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ### Agregar el componente Payment Element Usa el componente `PaymentElement` para crear tu formulario: ```jsx import React from 'react'; import {PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { return (
); }; export default CheckoutForm; ``` Stripe Elements es una colección de componentes de interfaz de usuario (IU) desplegables. Para personalizar aún más tu formulario o recopilar otra información del cliente, consulta la [documentación de Elements](https://docs.stripe.com/payments/elements.md). El Payment Element renderiza un formulario dinámico que le permite a tu cliente elegir un método de pago. Para cada método de pago, el formulario le pide automáticamente al cliente que complete todos los datos de pago necesarios. ### Personaliza el aspecto Personaliza el Payment Element para que coincida con el diseño de tu sitio especificando el [objeto appearance](https://docs.stripe.com/js/elements_object/create#stripe_elements-options-appearance) en `options` al crear el proveedor `Elements`. ### Recopila las direcciones Por defecto, el Payment Element solo junta los detalles necesarios de la dirección de facturación. Algunos comportamientos, como el [cálculo de impuestos](https://docs.stripe.com/api/tax/calculations/create.md) o la introducción de datos de envío, requieren la dirección completa de tu cliente. Puedes realizar lo siguiente: - Utiliza el [Address Element](https://docs.stripe.com/elements/address-element.md) para aprovechar las funcionalidades de autocompletar y localizar para obtener la dirección completa de tu cliente. Esto ayuda a garantizar el cálculo de impuestos más preciso. - Recopila los datos de la dirección mediante tu propio formulario personalizado. Una vez recibida la confirmación, Stripe abre automáticamente un cuadro de diálogo para mostrarle los datos de la transferencia bancaria al cliente. ## Enviar pago a Stripe [Lado del cliente] Usa [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) para completar el pago con los datos del Payment Element. Proporciona una [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) a esta función para indicar a dónde Stripe debe redirigir al usuario después de completar el pago. Es posible que primero se redirija al usuario a un sitio intermedio, como una página de autorización del banco y, luego, a la`return_url`. Los pagos con tarjeta redirigen inmediatamente a la `return_url` cuando un pago se realiza correctamente. Si no quieres realizar el redireccionamiento de pagos con tarjeta una vez que se completan los pagos, puedes configurar el [redireccionamiento](https://docs.stripe.com/js/payment_intents/confirm_payment#confirm_payment_intent-options-redirect) en `if_required`. Esto solo redirigirá a los clientes que finalizan su compra con métodos de pago basados en redireccionamiento. #### HTML + JS ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }); ``` #### React Para llamar a [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) desde el componente del formulario de pago, usa los hooks [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) y [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook). Si prefieres componentes de clase tradicionales en lugar de hooks, puedes usar un [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer). ```jsx import React, {useState} from 'react'; import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { const stripe = useStripe(); const elements = useElements(); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) setErrorMessage(error.message); } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }; return (
{/* Show error message to your customers */} {errorMessage &&
{errorMessage}
} ); }; export default CheckoutForm; ``` Asegúrate de que la `return_url` corresponda a una página de tu sitio web que proporcione el estado del pago. Cuando Stripe redirige al cliente a la `return_url`, proporcionamos los siguientes parámetros de consulta de URL: | Parámetro | Descripción | | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent` | El identificador único del `PaymentIntent`. | | `payment_intent_client_secret` | El [secreto de cliente](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) del objeto `PaymentIntent`. | > Si tienes herramientas que rastrean la sesión del navegador del cliente, es posible que debas agregar el dominio `stripe.com` a la lista de exclusión de referentes. Los redireccionamientos hacen que algunas herramientas creen nuevas sesiones, lo que te impide realizar un seguimiento de la sesión completa. Usa uno de los parámetros de consulta para recuperar el PaymentIntent. Examina el [estado del PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md) para decidir qué mostrarás a tus clientes. También puedes adjuntar tus propios parámetros de consulta cuando proporciones la `return_url`, que se mantendrán durante el proceso de redireccionamiento. #### HTML + JS ```javascript // Initialize Stripe.js using your publishable key const stripe = Stripe('<>'); // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => { const message = document.querySelector('#message') // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': message.innerText = 'Success! Payment received.'; break; case 'processing': message.innerText = "Payment processing. We'll update you when payment is received."; break; case 'requires_payment_method': message.innerText = 'Payment failed. Please try another payment method.'; // Redirect your user back to your payment page to attempt collecting // payment again break; default: message.innerText = 'Something went wrong.'; break; } }); ``` #### React ```jsx import React, {useState, useEffect} from 'react'; import {useStripe} from '@stripe/react-stripe-js'; const PaymentStatus = () => { const stripe = useStripe(); const [message, setMessage] = useState(null); useEffect(() => { if (!stripe) { return; } // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe .retrievePaymentIntent(clientSecret) .then(({paymentIntent}) => { // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': setMessage('Success! Payment received.'); break; case 'processing': setMessage("Payment processing. We'll update you when payment is received."); break; case 'requires_payment_method': // Redirect your user back to your payment page to attempt collecting // payment again setMessage('Payment failed. Please try another payment method.'); break; default: setMessage('Something went wrong.'); break; } }); }, [stripe]); return message; }; export default PaymentStatus; ``` ## Optional: Enviar correos electrónicos con instrucciones de pago Puedes habilitar los correos electrónicos con instrucciones de pago para transferencias bancarias desde el [Dashboard](https://dashboard.stripe.com/settings/emails). Después de hacerlo, Stripe le enviará a tu cliente un correo electrónico en los siguientes casos: - Se confirma un PaymentIntent, pero el cliente no tiene saldo suficiente. - El cliente envía una transferencia bancaria, pero no tiene fondos suficientes para completar los pagos pendientes. Los correos electrónicos con instrucciones de pago para transferencias bancarias contienen el importe adeudado, la información bancaria para transferir los fondos y un enlace a la página de instrucciones alojada en Stripe. > En el entorno de prueba, los correos electrónicos con instrucciones de pago solo se envían a las direcciones de correo vinculadas a la cuenta de Stripe. ## Confirma que el PaymentIntent se procesó correctamente El estado del PaymentIntent es `requires_action` hasta que los fondos llegan a la cuenta bancaria. Cuando los fondos están listos, el estado del PaymentIntent se actualiza y pasa de `requires_action` a `succeeded`. Tu punto de conexión de *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) debe estar configurado para empezar a recibir el evento `payment_intent.partially_funded`. Cuando solo se paga parte del PaymentIntent, el estado sigue siendo `requires_action`. Puedes [agregar un webhook desde el Dashboard](https://dashboard.stripe.com/webhooks/create). Como opción, puedes usar la [API Webhook Endpoints](https://docs.stripe.com/api/webhook_endpoints.md) para empezar a recibir el evento [payment_intent.partially_funded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.partially_funded). > La [CLI de Stripe](https://docs.stripe.com/stripe-cli.md) no admite la activación de eventos de la versión beta de la API, como `payment_intent.partially_funded`. Los siguientes eventos se envían durante el movimiento de los fondos del pago cuando se actualiza el PaymentIntent. | Evento | Descripción | Próximos pasos | | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent.requires_action` | Se envía durante la confirmación cuando no hay fondos suficientes en el saldo de cliente para conciliar el PaymentIntent. El estado del PaymentIntent pasa a `requires_action`. | Indícale a tu cliente que envíe una transferencia bancaria con el `amount_remaining`. | | `payment_intent.partially_funded` | El cliente envió una transferencia bancaria que se aplicó al PaymentIntent, pero no fue suficiente para completar el pago. Esto puede deberse a que el cliente transfirió un importe insuficiente (a causa de un error en el pago o a comisiones cobradas por el banco) o a que se le aplicó al PaymentIntent un saldo restante del cliente. Los PaymentIntents pagados en forma parcial no se reflejan en el saldo de tu cuenta hasta que se completa el pago. | Indícale al cliente que envíe otra transferencia bancaria con el nuevo `amount_remaining` para completar el pago. Si quieres completar el pago con los fondos aplicados en forma parcial, puedes actualizar el `amount` y [confirmar](https://docs.stripe.com/api/payment_intents/confirm.md) el PaymentIntent nuevamente. | | `payment_intent.succeeded` | El pago del cliente se efectuó correctamente. | Entrega los bienes o servicios que el cliente compró. | > Cuando cambias el importe de un PaymentIntent parcialmente financiado, los fondos se devuelven al saldo del cliente. Si hay otros PaymentIntents abiertos, Stripe los financia automáticamente. Si el cliente está configurado para realizar la conciliación manual, debes [aplicar los fondos](https://docs.stripe.com/api/payment_intents/apply_customer_balance.md) de nuevo. Te recomendamos [usar webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) para confirmar que el cobro se haya efectuado correctamente y notificar al cliente que se efectivizó el pago. ### Código de ejemplo #### Ruby ```ruby require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Handle the event case event.type when 'payment_intent.requires_action' payment_intent = event.data.object # contains a Stripe::PaymentIntent # The payment intent was not fully funded due to insufficient funds # on the customer balance. Define and call a method to handle the payment intent. # handle_payment_intent_requires_action(payment_intent) when 'payment_intent.partially_funded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the payment intent being partially funded. # handle_payment_intent_partially_funded(payment_intent) when 'payment_intent.succeeded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the successful payment intent. # handle_payment_intent_succeeded(payment_intent) else puts "Unhandled event type: #{event.type}" end status 200 end ``` ### Ver pagos pendientes en el Dashboard Puedes ver todos los PaymentIntents pendientes asociados con transferencias bancarias en el [Dashboard](https://dashboard.stripe.com/payments) aplicando el filtro **En espera de fondos** al campo **Estado**. ## Probar tu integración Puedes probar tu integración simulando una transferencia bancaria entrante con la API, a través del Dashboard o con una versión beta de la CLI de Stripe. #### Dashboard Para simular una transferencia bancaria utilizando el Dashboard en un *entorno de prueba* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vaya a la página del cliente en el Dashboard. En **Métodos de pago**, haga clic en **Añadir** y seleccione **Saldo de fondos (solo para pruebas)**. #### API Para simular una transferencia bancaria con la API, sigue estos pasos: #### EE. UU. ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="usd" ``` #### Reino Unido ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="gbp" ``` #### UE ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="eur" ``` #### Japón ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "amount"="1000" \ -d "currency"="jpy" ``` #### MX ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="123456" \ -d "amount"="1000" \ -d "currency"="mxn" ``` #### CLI de Stripe Para simular una transferencia bancaria con la CLI de Stripe, sigue estos pasos: 1. [Instala la CLI de Stripe](https://docs.stripe.com/stripe-cli.md). 1. Inicia sesión en la CLI con la misma cuenta con la que iniciaste sesión en el Dashboard de Stripe. ```bash stripe login ``` 1. Simula una transferencia bancaria entrante para un cliente existente. #### EE. UU. ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=usd ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. #### Reino Unido ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=gbp ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. #### UE ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=eur ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. #### Japón ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1000 \ --currency=jpy ``` #### MX ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=123456 \ --currency=mxn ``` El parámetro `reference` es opcional y simula el valor que el cliente ingresó en el campo de referencia de la transferencia bancaria. ## Cómo gestionar problemas temporales de disponibilidad Los siguientes códigos de error indican errores temporales en la disponibilidad del método de pago: | Código | Descripción | Gestión | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_method_rate_limit_exceeded` | Se realizaron demasiadas solicitudes en poco tiempo para este método de pago, cuyos límites son más estrictos que los [límites de frecuencia de toda la API](https://docs.stripe.com/rate-limits.md). | Estos errores pueden aparecer en varias solicitudes de API si muchos clientes intentan usar el mismo método de pago, por ejemplo, porque se ofrece una rebaja en tu sitio web. En este caso, pídeles a los clientes que usen otro método de pago. | > Si prevés un consumo intensivo en general o debido a un próximo evento, contáctanos tan pronto como lo sepas. # API Direct > This is a API Direct for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=direct-api. ## Configura Stripe [Lado del servidor] Primero, necesitas una cuenta de Stripe. [Inscríbete ahora](https://dashboard.stripe.com/register). 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' ``` ## Crea o recupera un objeto Customer [Lado del servidor] Debes asociar un objeto [Customer](https://docs.stripe.com/api/customers.md) para conciliar cada pago mediante transferencia bancaria. Si ya tienes un objeto Customer, puedes omitir este paso. De lo contrario, crea un nuevo objeto Customer. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Crea y confirma un PaymentIntent [Lado del servidor] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) es un objeto que representa tu intención de cobrarle a un cliente y hace el seguimiento del ciclo de vida del proceso de pago en cada etapa. Crea y confirma un PaymentIntent en el servidor y especifica el importe y la moneda del cobro. También debes completar el [parámetro del cliente](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) de la solicitud de creación de PaymentIntent. Las transferencias bancarias no están disponibles en PaymentIntents sin un cliente. #### Gestionar los métodos de pago desde el Dashboard Antes de crear un Payment Intent, asegúrate de activar **Transferencia bancaria** en la página de [configuración de métodos de pago](https://dashboard.stripe.com/settings/payment_methods) de tu Dashboard. > Con los [métodos de pago dinámicos](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), Stripe gestiona la devolución de los métodos de pago elegibles en función de factores como el importe de la transacción, la moneda y el flujo de pagos. #### Estados Unidos ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` #### Reino Unido ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=gbp \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=eur \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` Para localizar el IBAN que se muestra al cliente, puedes configurar el país del cliente estableciendo la propiedad [`address.country`](https://docs.stripe.com/api/customers/object.md#customer_object-address-country) o [editando el objeto Customer en el Dashboard](https://docs.stripe.com/invoicing/customer.md#edit-a-customer). Admitimos la localización del IBAN para : - Si no configuraste un país para tu cliente, o si su país no admite la localización del Código Internacional de Cuenta Bancaria (IBAN), de manera predeterminada, usamos el país de tu cuenta de Stripe. - Si la ubicación del IBAN no se admite para el país de tu cuenta de Stripe, de forma predeterminada, usaremos `IE`. > En este momento, la creación de nuevos números de cuentas bancarias virtuales localizados no está disponible para España (ES). En cambio, usa cualquiera de los otros países de VBAN de la UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=jpy \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=mxn \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` En la última versión de la API, especificar el parámetro `automatic_payment_methods` es opcional porque Stripe habilita su funcionalidad de forma predeterminada. Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Enumerar métodos de pago manualmente Para especificar manualmente los métodos de pago con la API, agrega `customer_balance` a la lista de [tipos de métodos de pago](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) de tu PaymentIntent. Especifica la [id](https://docs.stripe.com/api/customers/object.md#customer_object-id) del objeto Customer. #### Estados Unidos ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=us_bank_transfer" \ -d confirm=true ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `us_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. #### Reino Unido ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=gbp \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=gb_bank_transfer" \ -d confirm=true ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `gb_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=eu_bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]=FR" \ -d confirm=true ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `eu_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. - Establece [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) como uno de los . El IBAN que se muestra al cliente está localizado para el país elegido. > En este momento, la creación de nuevos números de cuentas bancarias virtuales localizados no está disponible para España (ES). En cambio, usa cualquiera de los otros países de VBAN de la UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d currency=jpy \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=jp_bank_transfer" \ -d confirm=true ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `jp_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=mxn \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=mx_bank_transfer" \ -d confirm=true ``` Si el cliente ya tiene fondos suficientes en el saldo para cubrir el importe del pago, el PaymentIntent se concretará de inmediato y se mostrará el estado `succeeded`. Los clientes pueden acumular fondos en el saldo si pagan de más por una transacción por error, algo que es común en las transferencias bancarias. Debes [conciliar los saldos del cliente en un plazo determinado en función de tu ubicación](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Utiliza `bank_transfer` como [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) para especificar qué se debe hacer cuando el cliente no tiene saldo suficiente para cubrir el importe del pago. - Utiliza `mx_bank_transfer` como [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) para especificar los tipos de transferencia bancaria que se pueden usar para financiar el pago. > Especifica siempre el `payment_method_types` al crear un pago. No puedes usar `customer_balance` para [pagos futuros](https://docs.stripe.com/payments/save-and-reuse.md). ## Indícale a tu cliente que complete una transferencia bancaria. [Lado del cliente] Si el saldo del cliente no es suficiente para cubrir el importe solicitado, el estado del PaymentIntent es `requires_action`. La respuesta tiene un campo `next_action` cuyo valor `type` es `display_bank_transfer_instructions`. El hash `next_action[display_bank_transfer_instructions]` contiene información que debes mostrar a tu cliente para que pueda completar la transferencia bancaria. Para garantizar la acreditación de los fondos, indica a tus clientes que utilicen los datos exactos que se proporcionan, en especial el nombre y el número de cuenta, si corresponde. > En *modo activo* (Use this mode when you’re ready to launch your app. Card networks or payment providers process payments), Stripe proporciona a cada cliente un conjunto único de datos de transferencias bancarias. Por el contrario, Stripe ofrece datos de transferencias bancarias no válidos para todos los clientes en entornos de prueba. A diferencia del modo activo, es posible que estos datos no válidos no siempre sean únicos. #### Estados Unidos | Campo | Descripción | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | El tipo de transferencia bancaria que se usará. En Estados Unidos, el tipo debe ser `us_bank_transfer`. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Un código de referencia único para identificar la transferencia bancaria. Indícale a tu cliente que incluya este código en el campo de referencia de su transferencia bancaria. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | El importe restante que se debe transferir para completar el pago. Indícale a tu cliente que transfiera este importe. Puede ser diferente del importe del PaymentIntent si se aplicaron fondos preexistentes en el saldo del cliente al PaymentIntent o si el cliente pagó menos dinero. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | La moneda del importe restante. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Lista de direcciones financieras de las cuentas bancarias de Estados Unidos. Los tipos incluidos son `aba` y `swift`. Consulta los detalles a continuación. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Un enlace a la página alojada que guía al cliente a lo largo del proceso de transferencia. | #### aba hash Ejemplo de un hash `aba`: ```json { "aba": { "account_number": "111222333444", "bank_name": "Wells Fargo Bank, NA", "routing_number": "444555666" }, "supported_networks": [ "ach", "domestic_wire_us" ], "type": "aba" } ``` | Campo | Valores | Descripción | | -------------------- | ------------------------------ | ------------------------------------------------- | | `type` | `aba` | El tipo de dirección financiera. | | `supported_networks` | - `ach` - `domestic_wire_us` | La lista de redes compatibles con esta dirección. | | `aba.account_number` | 111222333444 | El número ABA de la cuenta. | | `aba.routing_number` | 444555666 | El número ABA de enrutamiento. | | `aba.bank_name` | Wells Fargo Bank, NA | El nombre del banco. | #### hash de swift Ejemplo de un hash `swift`: ```json { "swift": { "account_number": "111222333444", "bank_name": "Wells Fargo Bank, NA", "swift_code": "AAAA-BB-CC-123" }, "supported_networks": [ "swift" ], "type": "swift" } ``` | Campo | Valores | Descripción | | ---------------------- | -------------------- | ------------------------------------------------- | | `type` | `swift` | El tipo de dirección financiera. | | `supported_networks` | - `swift` | La lista de redes compatibles con esta dirección. | | `swift.account_number` | 111222333444 | El número SWIFT de la cuenta. | | `swift.swift_code` | AAAA-BB-CC-123 | El código SWIFT. | | `swift.bank_name` | Wells Fargo Bank, NA | El nombre del banco. | #### Plazo de acreditación de fondos Después de indicarle a tu cliente que inicie una transferencia en su banco con la información proporcionada, la transferencia puede tardar hasta cinco días en completarse. El plazo de acreditación de fondos depende de los canales bancarios a través de los cuales la transferencia llegó a Stripe: - Las transferencias de ACH llegan dentro de 1 a 3 días hábiles. - Las transferencias bancarias nacionales (Fedwire) llegan el mismo día (si la transferencia se envía antes de la hora límite del banco). - Las transferencias bancarias internacionales (SWIFT) llegan dentro de 1 a 5 días hábiles. #### Reino Unido | Campo | Descripción | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | El tipo de transferencia bancaria que se usará. En el Reino Unido, el tipo debe ser `gb_bank_transfer`. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Un código de referencia único para identificar la transferencia bancaria. Indícale a tu cliente que incluya este código en el campo de referencia de su transferencia bancaria. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | El importe restante que se debe transferir para completar el pago. Indícale a tu cliente que transfiera este importe. Puede ser diferente del importe del PaymentIntent si se aplicaron fondos preexistentes en el saldo del cliente al PaymentIntent o si el cliente pagó menos dinero. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | La moneda del importe restante. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Lista de direcciones financieras para cuentas bancarias del Reino Unido. Los tipos incluidos son `sort_code`. Consulta los detalles a continuación. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Un enlace a la página alojada que guía al cliente a lo largo del proceso de transferencia. | ### hash sort_code Ejemplo de un hash `sort_code`: ```json { "sort_code": { "account_holder_name": "Demo Test Inc.", "account_number": "98765432", "sort_code": "200000" }, "supported_networks": [ "bacs", "fps" ], "type": "sort_code" } ``` | Campo | Valores | Descripción | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `sort_code` | El tipo de dirección financiera. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `bacs` - `fps` | La lista de redes compatibles con esta dirección. | | [sort_code.account_number](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-account_number) | 98765432 | El número de cuenta de ocho dígitos. | | [sort_code.sort_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-sort_code) | 200000 | El código Sort de seis dígitos. | | [sort_code.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-account_holder_name) | Demo Test Inc. | El nombre de la persona o la empresa que es titular de la cuenta bancaria. | #### Plazo de acreditación de fondos Después de indicarle a tu cliente que inicie una transferencia en su banco con la información proporcionada, la transferencia puede tardar hasta cinco días en completarse. El plazo de acreditación de fondos depende de los canales bancarios a través de los cuales la transferencia llegó a Stripe: - Las transferencias FPS llegan en 15 minutos. - Las transferencias BACS llegan dentro de los 5 días. > Todavía no se aceptan las transferencias bancarias enviadas mediante la red de pagos [CHAPS](https://www.bankofengland.co.uk/payment-and-settlement/chaps). #### UE | Campo | Descripción | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | El tipo de transferencia bancaria que se usará. En la UE, el tipo debe ser `eu_bank_transfer`. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Un código de referencia único para identificar la transferencia bancaria. Indícale a tu cliente que incluya este código en el campo de referencia de su transferencia bancaria. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | El importe restante que se debe transferir para completar el pago. Indícale a tu cliente que transfiera este importe. Puede ser diferente del importe del PaymentIntent si se aplicaron fondos preexistentes en el saldo del cliente al PaymentIntent o si el cliente pagó menos dinero. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | La moneda del importe restante. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Lista de direcciones financieras para cuentas bancarias de la Unión Europea. Los tipos incluidos son `iban`. Consulta los detalles a continuación. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Un enlace a la página alojada que guía al cliente a lo largo del proceso de transferencia. | ### iban hash Ejemplo de un hash `iban`: ```json { "iban": { "account_holder_name": "Demo Test Inc.", "bic": "CITINL2XXXX", "country": "NL", "iban": "NL40CITI7000799556 " }, "supported_networks": [ "sepa" ], "type": "iban" } ``` | Campo | Valores | Descripción | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `iban` | El tipo de dirección financiera. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `sepa` | La lista de redes compatibles con esta dirección. | | [iban.iban](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-iban) | NL40CITI7000799556 | El IBAN al que el cliente debe pagar. Si gestionas los métodos de pago desde el [Dashboard](https://dashboard.stripe.com/settings/payment_methods), el país del Código Internacional de Cuenta Bancaria (IBAN) se selecciona en función del [país](https://docs.stripe.com/api/customers/object.md#customer_object-country) del Customer o del país de tu cuenta de Stripe. Si manualmente haces una lista de los métodos de pago usando el parámetro [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types), el país del Código Internacional de Cuenta Bancaria (IBAN) se selecciona en función del parámetro [country](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_transfer-country) que se especificó en la solicitud. | | [iban.bic](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-bic) | CITINL2XXXX | El Código de identificación bancaria (BIC) para este Código Internacional de Cuenta Bancaria (IBAN). | | [iban.country](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-country) | `NL` | El código de país de dos letras de la cuenta bancaria a la que se transfiere. | | [iban.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-account_holder_name) | Demo Test Inc. | El nombre de la persona o la empresa que es titular de la cuenta bancaria. | #### Plazo de acreditación de fondos En el caso de las transferencias nacionales, pide a tu cliente que inicie una transferencia instantánea SEPA (si está disponible) con los datos que proporcionas. Por lo general, los fondos se acreditan en cuestión de segundos y llegan en 30 minutos. La acreditación de fondos puede prolongarse los fines de semana, los días festivos o si el banco del remitente no puede enrutar el pago a través del esquema Instant. En estos casos, la transferencia se procesa como un pago SEPA estándar. > La aceptación de transferencias internacionales en EUR está en versión preliminar. Para acceder anticipadamente a estas transferencias, ponte en contacto con [sepa-bank-transfers-beta@stripe.com](mailto:sepa-bank-transfers-beta@stripe.com). #### JP | Campo | Descripción | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | El tipo de transferencia bancaria que se usará. En Japón, el tipo debe ser `jp_bank_transfer`. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Este campo no se utiliza. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | El importe restante que se debe transferir para completar el pago. Indícale a tu cliente que transfiera este importe. Puede ser diferente del importe del PaymentIntent si se aplicaron fondos preexistentes en el saldo del cliente al PaymentIntent o si el cliente pagó menos dinero. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | La moneda del importe restante. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses) | Lista de direcciones financieras para cuentas bancarias de Japón. Los tipos incluidos son `zengin`. Consulta los detalles a continuación. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Un enlace a la página alojada que guía al cliente a lo largo del proceso de transferencia. | ### hachís de zengin Ejemplo de un hash `zengin`: ```json { "zengin": { "account_holder_name": "ストライプジャパン(カ シュウノウダイコウ", "account_number": "1234567", "account_type": "futsu", "bank_code": "0009", "bank_name": "三井住友銀行", "branch_code": "950", "branch_name": "東京第二" }, "supported_networks": [ "zengin" ], "type": "zengin" } ``` | Campo | Valores | Descripción | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `zengin` | El tipo de dirección financiera. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `zengin` | La lista de redes compatibles con esta dirección. | | [zengin.bank_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-bank_code) | 0009 | El código del banco de cuatro dígitos. | | [zengin.bank_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-bank_name) | 三井住友銀行 | El nombre del banco. | | [zengin.branch_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-branch_code) | 950 | El código de sucursal de tres dígitos. | | [zengin.branch_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-branch_name) | 東京第二 | El nombre de la sucursal. | | [zengin.account_type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_type) | `futsu`, `toza` | El tipo de cuenta. | | [zengin.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_holder_name) | ストライプジャパン(カ シュウノウダイコウ | El nombre del titular de la cuenta. | | [zengin.account_number](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_number) | 1234567 | El número de cuenta de siete dígitos. | #### Plazo de acreditación de fondos Indícale a tu cliente que inicie una transferencia en su banco con la información proporcionada. Las transferencias realizadas en horario comercial llegan el mismo día. Las transferencias realizadas fuera del horario comercial llegan el siguiente día hábil. #### MX | Campo | Descripción | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | El tipo de transferencia bancaria que se usará. En México, el tipo debe ser `mx_bank_transfer`. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Un código de referencia único para identificar la transferencia bancaria. Indícale a tu cliente que incluya este código en el campo de referencia de su transferencia bancaria. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | El importe restante que se debe transferir para completar el pago. Indícale a tu cliente que transfiera este importe. Puede ser diferente del importe del PaymentIntent si se aplicaron fondos preexistentes en el saldo del cliente al PaymentIntent o si el cliente pagó menos dinero. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | La moneda del importe restante. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Lista de direcciones financieras para cuentas bancarias de México. Los tipos incluidos son `spei`. Consulta los detalles a continuación. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Un enlace a la página alojada que guía al cliente a lo largo del proceso de transferencia. | ### spei hash Ejemplo de un hash `spei`: ```json { "spei": { "bank_code": "002", "bank_name": "BANAMEX", "clabe": "002180650612345670" }, "supported_networks": [ "spei" ], "type": "spei" } ``` | Campo | Valores | Descripción | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `spei` | El tipo de dirección financiera. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `spei` | La lista de redes compatibles con esta dirección. | | [spei.clabe](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-clabe) | 002180650612345670 | El número CLABE de 18 dígitos. | | [spei.bank_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-bank_code) | 002 | El código bancario de tres dígitos. | | [spei.bank_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-bank_name) | BANAMEX | Nombre abreviado de la institución bancaria | Indícale a tu cliente que inicie una transferencia en su banco con la información proporcionada. Esperamos que la mayoría de los pagos lleguen en menos de 10 minutos, tanto en días bancarios como no bancarios. ## Confirma el PaymentIntent procesado correctamente El estado del PaymentIntent permanece en `requires_action` hasta que los fondos llegan a la cuenta bancaria. Cuando los fondos están listos, el estado del PaymentIntent se actualiza y pasa de `requires_action` a `succeeded`. Debes configurar tu punto de conexión de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) para empezar a recibir el evento `payment_intent.partially_funded`. Puedes [agregar un webhook desde el Dashboard](https://dashboard.stripe.com/webhooks/create). Como opción, puedes usar la [API Webhook Endpoints](https://docs.stripe.com/api/webhook_endpoints.md) para empezar a recibir el evento [payment_intent.partially_funded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.partially_funded). Stripe envía los siguientes eventos durante el movimiento de los fondos del pago cuando actualizamos el PaymentIntent. | Evento | Descripción | Próximos pasos | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `payment_intent.requires_action` | Se envía durante la confirmación cuando el saldo del cliente no tiene fondos suficientes para conciliar el PaymentIntent, el PaymentIntent pasa a `requires_action`. Si el saldo de caja del cliente se aplicó automáticamente al PaymentIntent en el momento de la confirmación y el importe no cubre el `amount` del PaymentIntent, Stripe emite este evento con un `amount_remaining` preciso. | Indícale a tu cliente que envíe una transferencia bancaria con el `amount_remaining`. | | `payment_intent.partially_funded` | El cliente envió una transferencia bancaria que se aplicó al PaymentIntent, pero no fue suficiente para completar el pago. Esto puede deberse a que el cliente transfiere un importe insuficiente (a causa de un error en el pago o a comisiones cobradas por el banco) o a que se le aplicó al `PayIntent` el saldo restante del cliente. Los PaymentIntents pagados en forma parcial no se reflejan en el saldo de tu cuenta hasta que se completa el pago. | Solicítale a tu cliente que envíe otra transferencia bancaria con el nuevo `amount_remaining` para efectivizar el pago. Si quieres efectivivizar el pago con los fondos aplicados en forma parcial, puedes actualizar el `amount` y [confirmar](https://docs.stripe.com/api/payment_intents/confirm.md) el PaymentIntent nuevamente. | | `payment_intent.succeeded` | El pago del cliente se efectuó correctamente. | Entrega los bienes o servicios que el cliente compró. | Para escuchar todos los eventos relacionados con la financiación parcial, escucha tanto `requires_action` como `partially_funded`. Stripe emite `requires_action` cuando aún se requiere financiación después de la confirmación. Emitimos `partially_funded` cuando recibimos fondos adicionales más tarde por parte del cliente que no cubren el importe restante en su totalidad. > Cuando cambias el importe de un PaymentIntent parcialmente financiado, los fondos se devuelven al saldo del cliente. Si hay otros PaymentIntents abiertos, Stripe los financia automáticamente. Si el cliente está configurado para realizar la conciliación manual, tienes que [aplicar los fondos](https://docs.stripe.com/api/payment_intents/apply_customer_balance.md) de nuevo. Te recomendamos [usar webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) para confirmar que el cobro se haya efectuado correctamente y notificar al cliente que se efectivizó el pago. ### Código de ejemplo #### Ruby ```ruby require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Handle the event case event.type when 'payment_intent.requires_action' payment_intent = event.data.object # contains a Stripe::PaymentIntent # The payment intent was not fully funded due to insufficient funds # on the customer balance. Define and call a method to handle the payment intent. # handle_payment_intent_requires_action(payment_intent) when 'payment_intent.partially_funded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the payment intent being partially funded. # handle_payment_intent_partially_funded(payment_intent) when 'payment_intent.succeeded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the successful payment intent. # handle_payment_intent_succeeded(payment_intent) else puts "Unhandled event type: #{event.type}" end status 200 end ``` ### Ver los pagos pendientes en el Dashboard Puedes ver todos los PaymentIntents pendientes asociados con transferencias bancarias en el [Dashboard](https://dashboard.stripe.com/payments) aplicando el filtro **En espera de fondos** al campo **Estado**. ## Prueba tu integración Puedes probar tu integración simulando una transferencia bancaria entrante a través del Dashboard o con una solicitud HTTP. ### Con el Dashboard Para simular una transferencia bancaria utilizando el Dashboard en un *entorno de prueba* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vaya a la página del cliente en el Dashboard. En **Métodos de pago**, haga clic en **Añadir** y seleccione **Saldo de fondos (solo para pruebas)**. ### Con la API de Stripe Puedes realizar una llamada API para simular una transferencia bancaria. #### Estados Unidos ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxxxxxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d reference=REF-4242 ``` Puedes simular una revocación poniendo un prefijo al parámetro `de referencia` con `reversal_` (por ejemplo, `reversal_123`). #### Reino Unido ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxxxxxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=gbp \ -d reference=REF-4242 ``` #### UE ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=eur \ -d reference=REF-4242 ``` #### JP ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=10000 \ -d currency=jpy ``` #### MX ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=mxn \ -d reference=123456 ``` ## Cómo gestionar problemas temporales de disponibilidad Los siguientes códigos de error indican errores temporales en la disponibilidad del método de pago: | Código | Descripción | Gestión | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_method_rate_limit_exceeded` | Se realizaron demasiadas solicitudes en poco tiempo para este método de pago, cuyos límites son más estrictos que los [límites de frecuencia de toda la API](https://docs.stripe.com/rate-limits.md). | Estos errores pueden aparecer en varias solicitudes de API si muchos clientes intentan usar el mismo método de pago, por ejemplo, porque se ofrece una rebaja en tu sitio web. En este caso, pídeles a los clientes que usen otro método de pago. | > Si prevés un consumo intensivo en general o debido a un próximo evento, contáctanos tan pronto como lo sepas. ## Optional: Cómo recopilar opciones de métodos de pago de tu cliente Si es necesario, recopila el tipo de financiación preferido por tu cliente en tu sitio y confirma el Payment Intent mediante el método [confirmCustomerBalancePayment](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) para [Stripe.js](https://docs.stripe.com/js.md). Exhibe un formulario HTML para recopilar los datos de financiación de transferencias bancarias que prefiere el cliente. Usa esta información para completar el parámetro `payment_method_options`. Consulta la [documentación de referencia sobre JS](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) para obtener una lista de todos los parámetros `payment_method_options` disponibles para `confirmCustomerBalancePayment`. Este es un ejemplo de caso de uso: si eres un comerciante en Irlanda y no sabes con certeza en qué país se encuentra un cliente, puedes crear un `PaymentIntent` con `payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]` establecido primero en ‘IE’. A continuación, utiliza el método [confirmCustomerBalancePayment](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) para actualizar el país en función de las entradas del usuario. ### Código de muestra ```javascript const {paymentIntent, error} = await stripe.confirmCustomerBalancePayment( '{PAYMENT_INTENT_CLIENT_SECRET}', { payment_method: { customer_balance: { }, }, payment_method_options: { customer_balance: { funding_type: 'bank_transfer', bank_transfer: { type: 'eu_bank_transfer', eu_bank_transfer: { country: 'FR', } }, }, }, }, { handleActions: false, } ); if (error) { // Inform the customer that there was an error. } else if (paymentIntent.status === 'requires_payment_method') { // If `payment_method_options.funding_type` wasn't set this // is where you would need to handle the insufficient customer // balance state. } else if (paymentIntent.status === 'requires_action') { // If the current customer balance is insufficient to cover // the amount, and you've passed // `payment_method_options.funding_type` for funding the // customer balance, you can display the bank transfer // instructions to your user. if (paymentIntent.next_action.type === 'display_bank_transfer_instructions') { // Bank transfer details can be found under: // paymentIntent.next_action.display_bank_transfer_instructions } } ``` ## Optional: Enviar correos electrónicos con instrucciones de pago Puedes habilitar los correos electrónicos con instrucciones de pago para transferencias bancarias desde el [Dashboard](https://dashboard.stripe.com/settings/emails). Después de hacerlo, Stripe le enviará a tu cliente un correo electrónico en los siguientes casos: - Se confirma un PaymentIntent, pero el cliente no tiene saldo suficiente. - El cliente envía una transferencia bancaria, pero no tiene fondos suficientes para completar los pagos pendientes. Los correos electrónicos con instrucciones de pago para transferencias bancarias contienen el importe adeudado, la información bancaria para transferir los fondos y un enlace a la página de instrucciones alojada en Stripe. > En el entorno de prueba, los correos electrónicos con instrucciones de pago solo se envían a las direcciones de correo vinculadas a la cuenta de Stripe.