Entornos, pruebas y desarrollo local
16.1 Probar sin arriesgar dinero
Crear un pago no cobra nada: queda en pending hasta que alguien lo pague. Para probar sin
riesgo contra producción: un monto mínimo (L 1.00) y un expires_at cercano, y no lo pagues. El
enlace vence solo. Provocar errores 401 / 404 / 422 es igual de inofensivo.
16.2 Tarjetas de prueba de sandbox
Solo en sandbox, con llaves sk_test_ / pk_test_. El número de tarjeta es lo que elige el
desenlace, así que esta lista corta alcanza para ejercitar todos los caminos que un conector tiene
que manejar:
| Qué querés probar | PAN | Contraseña | Qué pasa |
|---|---|---|---|
| Camino feliz, sin desafío | 4012000000020071 |
— | Aprobada, estado Y |
| Un desafío 3-D Secure real | 4012000000020006 |
3ds2 |
Sale la pantalla, después aprueba |
| Autenticación rechazada | 5100270000000072 |
— | Estado R, rechazada |
| Rechazo del banco (do not honor) | 4666666666662222 |
— | Código de respuesta 05 |
| Autenticada, y el emisor caído | 4111111111110000 |
3ds2 |
Estado Y, después código 91 |
| Una tarjeta sin 3-D Secure | 4333333333332222 |
— | Aprobada, sin desafío |
Sirve cualquier fecha de vencimiento futura; CVV de 3 dígitos para Visa y Mastercard, de 4 para
Amex. La contraseña de cualquier pantalla de desafío es 3ds2.
Mandá el nombre del tarjetahabiente y un correo o un teléfono, o el 3-D Secure no corre y vas a recibir siempre el camino sin desafío sin enterarte.
Aprobadas sin desafío (frictionless): Visa 4012000000020071 (Y), 4012000000020089 (A),
4012010000020070 y 4012010000020088 (con huella de dispositivo); Mastercard 5100270000000023
(Y), 5100271000000120; Amex 341111000000009 (Y), 341111000000011 (A), 341112000008012.
Aprobadas después de un desafío real (contraseña 3ds2): Visa 4012000000020006,
4012010000020005; Mastercard 5100270000000031; Amex 341112000000001, 341111000000037.
Sin 3-D Secure de por medio: Visa 4333333333332222, Mastercard 5333333333332222,
Amex 343333333333335, Discover 6011111111111111, JCB 3528111111111108.
Rechazos y autenticación fallida:
| PAN | Contraseña | Qué devuelve |
|---|---|---|
4012000000020121 |
— | Estado N, código 12 |
5100270000000098 |
— | Estado N, código 12 |
5100270000000056 |
— | Sale el desafío, después estado N, código 12 |
5100270000000072 |
— | Estado R |
4666666666662222 |
— | Estado A, código 05, el CVV no coincide |
5555666666662222 |
— | Estado U, código 05 |
4111111111119999 |
— | Estado A, código 98 |
5111111111113333 |
— | Estado A, código 05 |
4111111111110000 |
3ds2 |
El desafío pasa (Y), después código 91 |
5111111111110000 |
3ds2 |
El desafío pasa (Y), después código 91 |
341111000000029 |
— | Estado N, código 12 |
6011111111111152 |
— | Rechazo de Discover |
3528111111111157 |
— | Rechazo de JCB |
El estado Y significa autenticado por completo y el A que se intentó autenticar; los dos pueden terminar igual en una aprobación. N, U y R no.
Dos cosas para las que no hay tarjeta, confirmado por el equipo del API el 25/08/2026:
- Fondos insuficientes (
51). El código existe en el juego de respuestas de producción, pero ninguna tarjeta de sandbox lo produce. Probá esa rama tratando el05como su equivalente, y mirá la §15 para saber qué códigos vale la pena reintentar. - Un número de tarjeta inválido o mal formado. No hay tarjeta porque no debería llegar nunca al API: validá el número en tu propio formulario antes.
Fuente: la documentación de sandbox de PowerTranz, transmitida por el equipo del API de ROKI el 25/08/2026. Son las tarjetas del procesador, así que se comportan igual en cualquier lugar donde PowerTranz sea el procesador.
16.3 Si el sandbox rechaza toda creación
Una llave sk_test_ puede autenticar correctamente y aun así fallar al crear pagos con:
422 "El entorno sandbox no esta configurado para enlaces de pago.
Contacte a soporte ROKI o use su clave API live."
Eso no es culpa de la llave ni del código, y regenerar la llave no lo arregla: la terminal de sandbox no está aprovisionada para ese comercio. Pedile a ROKI que habilite el sandbox para la cuenta.
16.4 Recibir webhooks en desarrollo local
ROKI tiene que poder alcanzar una URL HTTPS pública, así que localhost no va a funcionar.
Opciones:
- Un túnel (ngrok, Cloudflare Tunnel), registrando la URL generada en el portal bajo el entorno sandbox.
- Para solo inspeccionar eventos sin escribir código, un receptor público temporal (webhook.site y similares), útil para ver el payload y los encabezados reales.
Acordate de registrar la URL final antes de pasar a producción: las URLs de los túneles cambian.
