Con una clave sk_test_… y el conector Sim activo puedes probar el flujo
completo — tarjeta, SPEI, CoDi y OXXO — sin dar de alta ninguna cuenta real. Nada de esto
mueve dinero de verdad.
Tokens de tarjeta (tok_sim_*)
Tabla completa de SimConnector — el token va en paymentToken al confirmar con paymentMethod: "card":
| Token | Resultado |
|---|---|
tok_sim_ok | Éxito; captura inmediata. |
tok_sim_auth | Autoriza sin capturar (flujo auth/capture separado; requiere POST /v1/payment_intents/{id}/capture después). |
tok_sim_3ds | Pide acción: requires_action con next_action.type = "redirect". |
tok_sim_insufficient | Fondos insuficientes — decline duro. |
tok_sim_fraud | Sospecha de fraude — decline duro. |
tok_sim_issuer_down | Emisor caído — decline suave (reintentable con otro intento). |
tok_sim_provider_500 | Error genérico del proveedor. |
tok_sim_badcreds | Error de configuración (credenciales inválidas del conector). |
tok_sim_slow | Éxito (como tok_sim_ok) tras ~2 s de retraso — útil para observar el estado processing en vivo. |
| cualquier otro valor | Se trata como tok_sim_ok. |
99 siempre rechaza con
decline duro (código do_not_retry) — útil para probar tu manejo de errores
sin memorizar un token específico. Ej.: 84999 centavos falla siempre.
Simular pagos entrantes (SPEI, CoDi, OXXO)
Estos métodos son "push": el pagador paga fuera de tu app (transferencia, escaneo de QR, caja OXXO) y Winal se entera por el proveedor. En modo prueba, tú simulas ese aviso:
- Confirma el intent con el método push (
spei,codiuoxxo) — queda enrequires_action. - Obtén el
provider_refdel intento:GET /v1/payment_intents/{id}?expand=attempts→attempts[0].provider_ref. - Simula el pago: desde el portal (Probar un cobro → Simular pago entrante) o directo contra el endpoint de administración.
curl -s https://api.winal.com.mx/admin/tenants/$TENANT_ID/simulate-inbound \
-H "X-Admin-Key: $ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{ "provider_ref": "sim_rtp_4af1c02e9b3d4f4e8f0a1b2c3d4e5f60" }'
Este endpoint vive bajo /admin/* (protegido con X-Admin-Key, la
clave de tu portal — no tu clave sk_test_): es una herramienta de operador, no
parte de la API pública que integra el POS. Tras simular, el Worker recibe el aviso igual
que uno real y transiciona el intent con evidencia; espera el webhook o vuelve a consultar
el intent.
confirm (ver
Métodos de pago → DiMo) — limitación conocida de fase 0,
no un problema de tu integración.
Demo: Antech POS
/demo/pos.html es una demo navegable que usa
winal.js de verdad contra tu backend local: pega tu clave
sk_test_…, crea el intent, confirma con el kit público, y simula el pago
entrante para los métodos push — todo desde el navegador, sin escribir código.
Checklist antes de producción
- Credenciales live del proveedor guardadas en el portal, y clave
sk_live_…generada. - Webhook registrado en HTTPS, con verificación de firma (Gateway-Signature) y dedupe por
event_id. Idempotency-Keypersistido junto a la venta en tu sistema, para reintentos seguros ante timeouts.- Tu UI maneja
requires_actionpara los métodos que uses (QR CoDi, CLABE SPEI, referencia OXXO). - Una prueba con dinero real de bajo monto — los sandbox de los proveedores mexicanos divergen del comportamiento real.
- Hoy solo
MXNestá soportado end-to-end (el conector Sim rechaza cualquier otra moneda); no asumas multi-moneda todavía. - Las recargas de tiempo aire (
POST /v1/recharges) solo operan hoy en modo prueba: con una llavesk_live_el endpoint se rechaza conrecharge.livemode_unsupportedhasta que se conecte un agregador real.