Ir a contenido
Crea una cuenta o inicia sesión
Logotipo de la documentación de Stripe
/
Pregúntale a la IA
Crear cuentaIniciar sesión
Empezar
Pagos
Ingresos
Plataformas y marketplaces
Gestión del dinero
Recursos para desarrolladores
API y SDKAyuda
ResumenAceptar un pagoActualiza tu integración
Pagos por Internet
ResumenEncuentra tu caso de uso
Utiliza Payment Links
Usa una página de proceso de compra prediseñada
    Resumen
    Guías QuickStart
    Cómo funciona Checkout
    Personaliza el estilo
    Recolecta información adicional
    Cobrar impuestos
    Actualiza forma dinámica el proceso de compra
    Gestiona tu catálogo de productos
    Suscripciones
    Gestiona los métodos de pago
    Permite que los clientes paguen en su divisa local
    Añade descuentos, ventas de productos de más valor y artículos opcionales
    Configurar pagos futuros
    Guardar datos de pago durante el pago
    Después del pago
      Completar pedidos
      Envía recibos y facturas pagadas
      Personalizar el comportamiento de redireccionamiento
      Recuperar carritos abandonados
      Analizar la conversión de pagos
      Realizar un seguimiento de los eventos analíticos en Embedded Checkout
    Migrar desde Checkout heredado
    Migrar Checkout para usar precios
Crea una integración personalizada con Elements
Desarrolla una integración en la aplicación
Usa Managed Payments
Pagos recurrentes
Pagos en persona
Terminal
Métodos de pago
Añadir métodos de pago
Gestiona los métodos de pago
Proceso de compra más rápido con Link
Aspectos básicos de las operaciones de pago
Análisis
Saldos y plazos de liquidación
Cumplimiento de la normativa y seguridad
Divisas
Pagos rechazados
Disputas
Prevención de fraude
Protección antifraude de Radar
Transferencias
RecibosReembolsos y cancelaciones
Integraciones avanzadas
Flujos de pagos personalizados
Capacidad adquirente flexible
Pagos fuera de la sesión
Orquestación de varios responsables del tratamiento
Más allá de los pagos
Constituye tu empresa
Criptomonedas
Comercio agéntico
Pagos automáticos
Financial Connections
Climate
Verificar identidades
Estados Unidos
Español (España)
InicioPagosUse a prebuilt checkout pageAfter the payment

Completa los pedidos

Descubre cómo completar los pagos recibidos con la API Checkout Sessions.

When you receive a payment with the Checkout Sessions API (including Payment Links), you might need to take action to provide your customer with what they paid for. For example, you might need to grant them access to a service, or you might need to ship them physical goods. This process is known as fulfillment, and you have two ways to handle this process:

  • Manualmente: Puedes completar los pedidos manualmente con la información que Stripe pone a tu disposición. Por ejemplo, puedes supervisar el Dashboard, consultar los correos electrónicos de las notificaciones de pago, consultar los informes y, a continuación, completar los pedidos.
  • Automáticamente: puedes crear un sistema de gestión logística automatizado. Recomendado

The first option works for low volume or experimental ventures, but for most situations we recommend automating fulfillment. The rest of this guide shows you how to build an automatic fulfillment system.

Tramitación automática de pedidos

The automatic fulfillment system outlined below uses a combination of webhooks and a redirect to your website to trigger fulfillment. You must use webhooks to make sure fulfillment happens for every payment, and redirects let your customers access services or fulfillment details immediately after paying.

Nota

Payment Links usa Checkout, por lo que toda la información que aparece a continuación se aplica tanto a Payment Links como a Checkout, a menos que se indique lo contrario.

Crea una función de tramitación de pedidos
Lado del servidor

Crea una función en tu servidor para completar los pagos realizados correctamente. Los webhooks activan esta función, y se llama cuando los clientes son redirigidos a tu sitio web después de completar el proceso de compra. Esta guía se refiere a esta función como fulfill_checkout, pero puedes nombrarla como desees.

evitar cumplimientos de más,

Perform fulfillment only once per payment. Because of how this integration and the internet work, your fulfill_checkout function might be called multiple times, possibly concurrently, for the same Checkout Session. Performing checkout only once ensures this won’t cause undesired behavior.

La función fulfill_checkout debe:

  1. Gestiona correctamente que te llamen varias veces con el mismo ID de la sesión de Checkout.
  2. Acepta el ID de Checkout Sessions como argumento.
  3. Recupera la sesión de Checkout de la API con la propiedad line_items ampliada.
  4. Revisa la propiedad payment_status para determinar si necesita cumplimiento.
  5. Lleva a cabo el cumplimiento de las partidas individuales.
  6. Registra el estado de cumplimiento de la sesión de Checkout proporcionada.

Use the code below as a starting point for your fulfill_checkout function. The TODO comments indicate any functionality you must implement.

Nota

El fragmento de código que figura a continuación puede nombrar la función fulfill_checkout fulfillCheckout o FulfillCheckout según el idioma elegido, pero todos representan la misma función.

Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
def fulfill_checkout(session_id) # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
puts "Fullfilling Checkout Session #{session_id}" # TODO: Make this function safe to run multiple times, # even concurrently, with the same session ID # TODO: Make sure fulfillment hasn't already been # performed for this Checkout Session # Retrieve the Checkout Session from the API with line_items expanded checkout_session = Stripe::Checkout::Session.retrieve({ id: session_id, expand: ['line_items'], }) # Check the Checkout Session's payment_status property # to determine if fulfillment should be performed if checkout_session.payment_status != 'unpaid' # TODO: Perform fulfillment of the line items # TODO: Record/save fulfillment status for this # Checkout Session end end

Nota

Si una sesión de Checkout tiene muchas partidas individuales, usa la autopaginación con la API para partidas individuales del Checkout para recuperarlas todas.

Según los métodos de pago que aceptes y de las necesidades de tu empresa, quizás te convenga que la función fulfill_checkout haga lo siguiente:

  • Facilita el acceso a los servicios.
  • Activa el envío de bienes.
  • Guarda una copia de los datos de pago y de las partidas individuales en tu propia base de datos.
  • Envía al cliente un correo electrónico de recibo personalizado si no tienes habilitados los recibos de Stripe.
  • Concilia las partidas individuales y las cantidades compradas si permites que los clientes ajusten las cantidades en Checkout.
  • Actualiza el inventario o los registros de existencias.

Crea un controlador de eventos de pago
Lado del servidor

Para activar el cumplimiento, crea un controlador de eventos de webhook para recibir notificaciones de los eventos de pago y activar la función fulfill_checkout.

Cuando alguien te paga, se crea un evento checkout.session.completed. Configura un punto de conexión en tu servidor para aceptar, procesar y confirmar la recepción de estos eventos.

Métodos de pago inmediatos frente a métodos de pago diferidos

Algunos métodos de pago no son instantáneos, como el adeudo directo ACH y otras transferencias bancarias. Esto significa que los fondos no estarán disponibles de inmediato cuando se complete el proceso de compra. Los métodos de pago diferido generan un evento de checkout.session.async_payment_succeeded cuando el pago se efectúa correctamente más tarde. El estado del objeto es en procesamiento hasta que el pago se realiza correctamente o falla.

Nota

The webhook secret (whsec_...) shown in the code below comes from either the Stripe CLI or your webhook endpoint. You can use the Stripe CLI for local testing, and Stripe uses a webhook endpoint to send events to your handler when it’s running on a server. See the next section for more details.

Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
require 'sinatra' # Use the secret provided by Stripe CLI for local testing # or your webhook endpoint's secret. endpoint_secret = 'whsec_...' post '/webhook' do event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. begin sig_header = request.env['HTTP_STRIPE_SIGNATURE'] payload = request.body.read event = Stripe::Webhook.construct_event(payload, sig_header, endpoint_secret) rescue JSON::ParserError => e # Invalid payload return status 400 rescue Stripe::SignatureVerificationError => e # Invalid signature return status 400 end if event['type'] == 'checkout.session.completed' || event['type'] == 'checkout.session.async_payment_succeeded' fulfill_checkout(event['data']['object']['id']) end status 200 end

Es posible que también quieras recibir notificaciones y manejar eventos checkout.session.async_payment_failed. Por ejemplo, puedes enviar un correo electrónico a tu cliente cuando falla un pago retrasado.

Prueba tu controlador de eventos de forma local

The quickest way to develop and test your webhook event handler is with the Stripe CLI. If you don’t have the Stripe CLI, follow the install guide to get started.

When the Stripe CLI is installed, you can test your event handler locally. Run your server (for example, on localhost:4242), then run the stripe listen command to have the Stripe CLI forward events to your local server:

Command Line
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_<REDACTED>' (^C to quit)

Añade el webhook secreto (whsec_...) a tu código de gestión de eventos y, a continuación, prueba el cumplimiento accediendo a Checkout como cliente:

  • Pulsa el botón de finalización de compra que te lleva a Checkout o visita tu Payment Link.
  • Proporciona los siguientes datos de prueba en Checkout:
    • Introduce 4242 4242 4242 4242 como número de tarjeta
    • Introduce cualquier fecha futura como fecha de caducidad
    • Introduce cualquier número de tres dígitos como CVC
    • Introduce cualquier código postal de facturación (90210)
  • Pulsa el botón Pagar

Cuando se efectiviza el pago, verifica lo siguiente:

  • En tu línea de comandos, donde se está ejecutando stripe listen, se muestra un evento checkout.session.completed reenviado a tu servidor local.
  • Los registros de tu servidor muestran la salida esperada de la función fulfill_checkout.

Crea un punto de conexión de webhooks

After testing locally, get your webhook event handler up and running on your server. Next, create a webhook endpoint to send checkout.session.completed events to your server, then test the Checkout flow again.

Configura la URL de una página de destino
Recomendado

Configure Checkout to send your customer to a page on your website after they complete Checkout. Include the {CHECKOUT_SESSION_ID} placeholder in your page’s URL, which is replaced with the Checkout Session ID when your customer is redirected from Checkout.

Proceso de compra alojado

Para Checkout Sessions con el ui_mode predeterminado de hosted, establece la success_url.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "line_items[0][price]"=
"{{PRICE_ID}}"
\ -d "line_items[0][quantity]"=1 \ -d mode=payment \ --data-urlencode success_url="https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}"

When you have a webhook endpoint set up to listen for checkout.session.completed events and you set a success_url, Checkout waits up to 10 seconds for your server to respond to the webhook event delivery before redirecting your customer. If you use this approach, make sure your server responds to checkout.session.completed events as quickly as possible. If you’re using the Stripe CLI for local testing, Checkout redirects to the success_url immediately.

Los puntos de conexión de webhook registrados en la cuenta de una organización no soportan este comportamiento. Stripe no espera a que los puntos finales de webhook de la organización escuchen checkout.session.completed para dar respuesta a la hora de redirigir a clientes en el proceso de compra.

Payment Links

Para Payment Links que crees con la API, establece la after_completion.redirect.url.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_links \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "line_items[0][price]"=
"{{PRICE_ID}}"
\ -d "line_items[0][quantity]"=1 \ -d "after_completion[type]"=redirect \ --data-urlencode "after_completion[redirect][url]"="https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}"

Para Payment Links que crees en el Dashboard:

  1. Ve a la pestaña Después del pago.
  2. Selecciona No mostrar la página de confirmación.
  3. Proporciona la URL de tu página de destino que incluya el marcador de posición {CHECKOUT_SESSION_ID} (por ejemplo, https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID})

Activa la gestión logística en tu página de destino
Recomendado

Listening to webhooks is required to make sure you always trigger fulfillment for every payment, but webhooks can sometimes be delayed. To optimize your payment flow and guarantee immediate fulfillment when your customer is present, trigger fulfillment from your landing page as well.

Usa el ID de la sesión de Checkout de la URL que especificaste en el paso anterior para hacer lo siguiente:

  1. Cuando tu servidor reciba una solicitud para tu página de destino de Checkout, extrae el ID de la sesión de Checkout de la URL.
  2. Ejecuta la función fulfill_checkout con el ID proporcionado.
  3. Renderiza la página una vez que se complete el intento de completar el pedido.

Al renderizar la página de destino, puede mostrar lo siguiente:

  • Detalles del proceso de cumplimiento de pedidos.
  • Enlaces o información sobre los servicios a los que el cliente ahora tiene acceso.
  • Detalles de envío o logística de bienes físicos.

Los webhooks son obligatorios

You can’t rely on triggering fulfillment only from your Checkout landing page, because your customers aren’t guaranteed to visit that page. For example, someone can pay successfully in Checkout and then lose their connection to the internet before your landing page loads.

Configura un controlador de eventos de webhook para que Stripe pueda enviar eventos de pago directamente a tu servidor, sin pasar por el cliente en lo absoluto. Los webhooks son la forma más fiable de confirmar cuándo recibes pagos. Si falla la entrega del evento de webhook, Stripe lo reintenta varias veces.

¿Te ha sido útil la página?
SíNo
  • ¿Necesitas ayuda? Ponte en contacto con el equipo de soporte.
  • Echa un vistazo a nuestro registro de cambios.
  • ¿Tienes alguna pregunta? Ponte en contacto con el equipo de ventas.
  • ¿LLM? Lee llms.txt.
  • Con tecnología de Markdoc