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
- Pedir el checkout con
provider: "transbank_webpay_plus"(oauto, si Webpay es el proveedor prioritario de tu comercio). - Enviar un formulario
POSTacheckout.urlcon cada entrada decheckout.fieldscomo campo oculto (hoy,token_ws). - En tu
return_url, mostrar un estado "procesando" y esperar el webhook, o consultarGET /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_urlsolo recibe elpayment_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 tureturn_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_wsno 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
CANCELLEDoEXPIREDy recibespayment.cancelledopayment.expired.
Estados que verás
| Situación | Estado del intent | Evento |
|---|---|---|
| Checkout pedido | REQUIRES_ACTION | payment.checkout.started |
| Transbank aprobó | AUTHORIZED | payment.authorized |
| Transbank rechazó | FAILED | payment.failed |
| El comprador anuló | CANCELLED | payment.cancelled |
| El checkout venció | EXPIRED | payment.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.