Saltar al contenido principal

Flujo con Transbank Webpay Plus

Webpay Plus usa un redirect por POST: te devolvemos una url y un token_ws, y el navegador del comprador envía ese token al formulario de Webpay. Cuando el comprador vuelve, la plataforma confirma la transacción con Transbank antes de dar el pago por autorizado.

Qué tienes que hacer​

  1. Pedir el checkout con provider: "transbank_webpay_plus" (o auto, si Webpay es el proveedor prioritario de tu comercio).
  2. Enviar un formulario POST a checkout.url con cada entrada de checkout.fields como campo oculto (hoy, token_ws).
  3. En tu return_url, mostrar un estado "procesando" y esperar el webhook, o consultar GET /v1/payment-intents/{payment_intent_id}.

Detalles que importan​

  • El retorno no confirma el pago. La plataforma hace el commit con Transbank y recién ahí cambia el estado. Tu return_url solo recibe el payment_intent_id, nunca un token del proveedor.
  • Retorno repetido. Si el navegador reenvía el mismo token_ws (recarga o doble envío), no se confirma dos veces: el comprador vuelve igual a tu return_url.
  • Sin cobros duplicados. El identificador de la orden hacia Transbank es estable para cada intento: si la creación se reintenta, Transbank ve la misma orden.
  • token_ws no es un token de tarjeta. Sirve solo para esa transacción.
  • Abandono o vencimiento. Si el comprador anula o el formulario vence, el intent termina en CANCELLED o EXPIRED y recibes payment.cancelled o payment.expired.

Estados que verás​

SituaciónEstado del intentEvento
Checkout pedidoREQUIRES_ACTIONpayment.checkout.started
Transbank aprobóAUTHORIZEDpayment.authorized
Transbank rechazóFAILEDpayment.failed
El comprador anulóCANCELLEDpayment.cancelled
El checkout vencióEXPIREDpayment.expired

Ambientes​

El comercio usa Webpay en modo MOCK (simulador), SANDBOX (ambiente de integración de Transbank) o PRODUCTION. Tu código es el mismo en los tres: cambia la configuración del comercio. Ver Proveedores y routing y Sandbox.