Valores de prueba
Valores de prueba
En el sandbox, lo que escribe el pagador decide qué responde el banco simulado. Es la misma idea que las tarjetas de prueba de otras pasarelas: escribes un valor reservado en el checkout y obtienes el desenlace que quieres ensayar.
Hay tres tablas, una por medio de pago, y las tres se leen igual: cualquier otro valor se comporta como un pagador normal y aprueba. No necesitas saberte ninguna para que tu primer checkout funcione.
| Medio de pago | Qué lo decide | Dónde aplica |
|---|---|---|
| Domiciliación (planes recurrentes) | La cédula del pagador | Checkout de suscripción, renovaciones, Cobro por API |
| Débito inmediato (pago único) | La cédula del pagador, más un código OTP reservado | Checkout de pago único y links de pago |
| Tarjeta (pago único) | El número de la tarjeta | Checkout de pago único y links de pago, cuando tu organización tiene tarjetas habilitadas |
Estos valores son estables. Puedes escribir tu suite de pruebas contra ellos: no van a cambiar de significado. Si algún día hiciera falta agregar uno, se agregaría sin tocar los que ya existen. Aun así, tenlos en un solo lugar de tu código, como harías con cualquier constante de integración.
Códigos MOCK_
Todo rechazo del banco simulado trae un código con el prefijo MOCK_ (por ejemplo
MOCK_AC04 para una cuenta cerrada, MOCK_05 para una tarjeta no honrada). Imitan el
vocabulario de un banco real para que el fallo se parezca al de verdad, pero el prefijo
está ahí a propósito: un código del sandbox nunca debe poder confundirse con la respuesta
de un banco en tus registros. No escribas comparaciones exactas contra ellos en el código
que va a producción.
Lo mismo con las referencias: toda referencia bancaria que emite el banco simulado empieza
por MOCK-.
Dónde los ves
| Dónde | Qué trae |
|---|---|
Webhook PAYMENT_FAILED_EVENT | El código y el motivo, dentro de payment.errorMessage. Por ejemplo: {"code":"MOCK_AC04","message":"Account closed — do not retry","source":"gateway"} |
Webhook EXTERNAL_CHARGE_FAILED_EVENT (Cobro por API) | El motivo, en failureReason (por ejemplo "Insufficient funds"). Este evento no trae el código |
| Panel, con el modo sandbox encendido | La solicitud de pago de un débito inmediato rechazado |
Necesitas un webhook configurado en tu organización sandbox. Los webhooks del sandbox son independientes de los de tu organización real: si no configuras uno con el modo sandbox encendido, los rechazos ocurren igual pero no te llega ningún aviso.
Cuando lo que falla es la validación de la cuenta en un checkout de domiciliación (ver abajo), ten en cuenta dos cosas al consultar el API:
- La sesión sigue en
in_progress. El pagador todavía puede corregir y reintentar mientras la sesión esté vigente, así que el rechazo no la cierra. - No se crea ningún pago. El cobro de validación de 1 Bs no es un pago de la
suscripción: el pago y la factura existen solo cuando la validación pasa. Por eso el
código
MOCK_de ese rechazo solo te llega por el webhook.
Domiciliación: la cédula
Aplica a los planes recurrentes. El banco simulado responde según la cédula del pagador en dos momentos:
- En el checkout, al validar la cuenta. Antes de activar la suscripción, el checkout le cobra al pagador 1 Bs y se lo devuelve, para comprobar que la domiciliación funciona. La cédula actúa desde este cobro, así que es lo primero que vas a ver.
- En los cobros de la suscripción: el primero y cada renovación, una vez que la suscripción está activa.
Algunas cédulas se ven distinto en cada momento. La tabla dice qué responde el banco; la siguiente, qué ve el pagador en el checkout.
| Cédula | Qué hace el banco simulado | Para qué sirve |
|---|---|---|
00000001 | Aprueba de inmediato | El camino feliz, dicho de forma explícita |
00000002 | Rechaza de forma definitiva (MOCK_AC04) | La factura se da por perdida; reintentar no tiene sentido |
00000003 | Rechaza, pero se puede reintentar (MOCK_AM04) | El caso de la cobranza automática (dunning) |
00000004 | Acepta y da el veredicto en la siguiente consulta | Un banco que tarda unos segundos en confirmar |
00000005 | Responde que la cuenta no está domiciliada (MOCK_MD01) | Lo que responde un banco real mientras el pagador no ha aprobado la domiciliación en su app |
00000006 | Respuesta inservible: no se sabe si se debitó (MOCK_408) | En un cobro de suscripción, la factura queda en revisión manual. Ver la nota de abajo |
00000007 | Nunca responde (MOCK_PENDING en cada consulta) | Todo intento contesta "seguimos procesando" hasta que el sistema se rinde |
Da igual cómo escribas la cédula: V-00000002, v00000002 y 00000002 significan lo
mismo. Solo cuentan los dígitos.
El bloque 0000xxxx es seguro por construcción: una cédula venezolana se escribe sin
ceros a la izquierda, así que el documento de una persona real nunca puede caer ahí por
accidente.
Qué ve el pagador en el checkout
Mientras se valida la cuenta, el pagador ve la pantalla "Confirmando con tu banco". Lo que pasa después depende de la cédula:
| Cédula | En la pantalla | ¿Se activa la suscripción? |
|---|---|---|
00000001 | Unos segundos en "Confirmando con tu banco" y sigue hasta "Activar suscripción" | Sí |
00000002, 00000003 | Aviso de "Validación rechazada" y vuelve a la pantalla de "apruébala en tu banca en línea", igual que un rechazo real | No |
00000004 | Unos segundos más en "Confirmando con tu banco" (alrededor de 10) y sigue igual que 00000001. No hay una pantalla de espera aparte: la demora es una consulta extra al banco | Sí |
00000005 | Aviso de "Validación rechazada" y vuelve a la pantalla de "apruébala en tu banca en línea". Cada vez que pulse "Ya la aprobé" pasa lo mismo. Es lo que ve un pagador real que todavía no aprueba la domiciliación en su banco | No, hasta que la apruebes con el test helper |
00000006 | Unos 2 minutos en "Confirmando con tu banco". Luego el sistema se rinde, devuelve el 1 Bs y muestra "No pudimos confirmar el cobro", con la opción de intentar de nuevo | No |
00000007 | Unos 3 minutos en "Confirmando con tu banco" y luego la pantalla de "Confirmación pendiente", que sigue consultando | No, salvo que lo resuelvas con el test helper |
00000006 no llega a un cobro de suscripción desde el checkout. Como la validación de
la cuenta nunca se completa, el pagador no termina con una suscripción activa, y el test
helper no puede resolver esta cédula. Por eso, hoy la revisión manual de una factura no se
puede ensayar con un checkout: en el checkout, 00000006 solo te muestra cómo se ve una
validación que el banco no confirma.
No son solo el primer cobro
El desenlace viaja con el pagador, no con la sesión. El cliente que creaste con
00000003 va a seguir rechazando en cada renovación de esa suscripción, que es justo lo
que necesitas para ensayar tu cobranza automática.
Y como la elección es por pagador, puedes tener varios checkouts vivos en el mismo sandbox, cada uno con su desenlace, sin que se pisen. Una suite de pruebas puede correr en paralelo.
Combinaciones
Los valores de prueba conviven con el resto de las opciones del plan:
- Con período de prueba (trial): con
00000004, la validación tarda unos segundos más en confirmarse y la suscripción queda entrialing. - Con inicio diferido: la domiciliación se resuelve igual; el primer cobro espera a su fecha.
Cuáles puede cambiar el test helper
El test helper cambia la respuesta con el checkout ya en curso, pero solo sobre una domiciliación que está esperando:
| Cédula | ¿El helper la puede resolver? |
|---|---|
00000004, 00000005, 00000007 | Sí. Están esperando un veredicto, y el helper lo da |
00000002, 00000003 | No. El banco ya respondió y su respuesta fue un rechazo |
00000001 | No. Ya está aprobada; no hay nada pendiente que resolver |
00000006 | No. El banco ya dio su respuesta (inservible), y el helper no la reemplaza |
Si lo que buscas es un pagador que siempre falle, hagas lo que hagas, ese es
00000002: el helper no lo toca.
Débito inmediato: la cédula y el código OTP
Aplica al pago único (un plan de tipo one_time) y a los links de pago. El pagador escribe
su cédula y su teléfono, pulsa Pagar, y el checkout le pide el código OTP que su banco
le habría enviado por SMS.
En el sandbox no se envía ningún SMS. Cualquier código de ocho dígitos se acepta, salvo uno:
| Código OTP | Qué hace el banco simulado |
|---|---|
00000000 | Lo rechaza siempre, para cualquier pagador, con el código MOCK_OTP y el motivo "Clave incorrecta" |
| Cualquier otro de ocho dígitos | Lo acepta, y entonces decide la cédula |
Con el código aceptado, la cédula del pagador elige el desenlace con la misma tabla de la domiciliación. Como aquí no hay una cuenta que domiciliar, dos de los valores significan algo ligeramente distinto:
| Cédula | Qué hace el banco simulado | Qué ve el pagador |
|---|---|---|
00000001 o cualquier otra | Aprueba al confirmar el OTP | El recibo de "Pago único recibido" |
00000002 | Rechaza al confirmar el OTP (MOCK_AC04) | Un mensaje de rechazo en el cuadro del código, con la opción de intentar de nuevo |
00000003 | Rechaza al confirmar el OTP (MOCK_AM04) | Igual que 00000002; la diferencia está en el código, para que distingas un rechazo definitivo de uno que se puede reintentar |
00000004, 00000005 | Acepta el OTP como "en proceso" y aprueba en la primera consulta de estado | Una espera breve y luego el recibo |
00000006 | Acepta el OTP como "en proceso" y luego no sabe si debitó | El cobro queda en revisión manual |
00000007 | Acepta el OTP como "en proceso" y nunca responde | La espera, hasta que el sistema libera el intento |
00000005 existe para ensayar una domiciliación que el pagador no aprueba. En débito
inmediato no hay domiciliación, así que se comporta como 00000004.
El pagador lee el motivo del rechazo en el cuadro del código, con las mismas palabras que
usaría un banco real ("Clave incorrecta", "Insufficient funds"). El código (MOCK_OTP,
MOCK_AM04) no se muestra en pantalla: queda en la solicitud de pago, que ves en el panel con
el modo sandbox encendido.
El test helper no interviene en el débito inmediato: solo resuelve domiciliaciones.
Tarjeta: el número
Aplica al pago único y a los links de pago, y solo si tu organización real tiene el pago con tarjeta habilitado: el sandbox ofrece exactamente los medios que tu organización tiene habilitados, sin importar con qué banco cobras.
El número de la tarjeta decide. Son los mismos números que publican otras pasarelas para las mismas cuatro situaciones, para que los reconozcas a la vista:
| Número de tarjeta | Qué hace el banco simulado | Para qué sirve |
|---|---|---|
4111 1111 1111 1111 | Aprueba (000000 · "Approved") | El camino feliz, dicho de forma explícita |
4000 0000 0000 0002 | Rechaza (MOCK_05 · "Do not honor") | El rechazo genérico: el pagador puede intentar con otra tarjeta |
4000 0000 0000 9995 | Rechaza por fondos (MOCK_51 · "Insufficient funds") | Un código distinto, para que tu integración muestre dos motivos diferentes |
4000 0000 0000 0119 | No decide (MOCK_TIP · "Transacción en proceso") | El cobro queda en espera y una persona lo resuelve. El pagador ve que no debe reintentar |
Cualquier otro número válido (entre 13 y 19 dígitos, que pase la verificación de dígito de control) se cobra como una tarjeta normal. Los demás campos no influyen: cualquier fecha de vencimiento futura, cualquier código de seguridad de tres dígitos, cualquier nombre.
Los cuatro números empiezan por 4, así que el formulario los lee como Visa y no pide PIN.
El pago con tarjeta nunca se guarda como instrumento de cobro: en el sandbox, como en producción, solo sirve para cobros únicos. Un plan recurrente no ofrece tarjeta.
Lo que no se puede ensayar
Pago Móvil no está en el sandbox. Es un medio que se verifica contra el banco —Venflow busca el movimiento en la cuenta del comercio antes de dar el pago por bueno— y no hay banco contra el cual verificar. En producción está disponible para los comercios que cobran por BNC.
Eso tiene una consecuencia para tu conciliación: la referencia que un pago por Pago Móvil
trae en bankReference (la que el pagador ve en su app) solo la vas a ver en
producción. En el sandbox, toda referencia es MOCK-… y viene del débito inmediato, de
la domiciliación o de la tarjeta. Si tu integración cruza referencias contra extractos,
pruébala con los pagos que el sandbox sí produce y deja Pago Móvil para el
cobro piloto.