Venflow API

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 pagoQué lo decideDónde aplica
Domiciliación (planes recurrentes)La cédula del pagadorCheckout de suscripción, renovaciones, Cobro por API
Débito inmediato (pago único)La cédula del pagador, más un código OTP reservadoCheckout de pago único y links de pago
Tarjeta (pago único)El número de la tarjetaCheckout 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óndeQué trae
Webhook PAYMENT_FAILED_EVENTEl 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 encendidoLa 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:

  1. 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.
  2. 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édulaQué hace el banco simuladoPara qué sirve
00000001Aprueba de inmediatoEl camino feliz, dicho de forma explícita
00000002Rechaza de forma definitiva (MOCK_AC04)La factura se da por perdida; reintentar no tiene sentido
00000003Rechaza, pero se puede reintentar (MOCK_AM04)El caso de la cobranza automática (dunning)
00000004Acepta y da el veredicto en la siguiente consultaUn banco que tarda unos segundos en confirmar
00000005Responde 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
00000006Respuesta 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
00000007Nunca 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édulaEn la pantalla¿Se activa la suscripción?
00000001Unos segundos en "Confirmando con tu banco" y sigue hasta "Activar suscripción"Sí
00000002, 00000003Aviso de "Validación rechazada" y vuelve a la pantalla de "apruébala en tu banca en línea", igual que un rechazo realNo
00000004Unos 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 bancoSí
00000005Aviso 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 bancoNo, hasta que la apruebes con el test helper
00000006Unos 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 nuevoNo
00000007Unos 3 minutos en "Confirmando con tu banco" y luego la pantalla de "Confirmación pendiente", que sigue consultandoNo, 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 en trialing.
  • 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, 00000007Sí. Están esperando un veredicto, y el helper lo da
00000002, 00000003No. El banco ya respondió y su respuesta fue un rechazo
00000001No. Ya está aprobada; no hay nada pendiente que resolver
00000006No. 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 OTPQué hace el banco simulado
00000000Lo rechaza siempre, para cualquier pagador, con el código MOCK_OTP y el motivo "Clave incorrecta"
Cualquier otro de ocho dígitosLo 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édulaQué hace el banco simuladoQué ve el pagador
00000001 o cualquier otraAprueba al confirmar el OTPEl recibo de "Pago único recibido"
00000002Rechaza al confirmar el OTP (MOCK_AC04)Un mensaje de rechazo en el cuadro del código, con la opción de intentar de nuevo
00000003Rechaza 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, 00000005Acepta el OTP como "en proceso" y aprueba en la primera consulta de estadoUna espera breve y luego el recibo
00000006Acepta el OTP como "en proceso" y luego no sabe si debitóEl cobro queda en revisión manual
00000007Acepta el OTP como "en proceso" y nunca respondeLa 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 tarjetaQué hace el banco simuladoPara qué sirve
4111 1111 1111 1111Aprueba (000000 · "Approved")El camino feliz, dicho de forma explícita
4000 0000 0000 0002Rechaza (MOCK_05 · "Do not honor")El rechazo genérico: el pagador puede intentar con otra tarjeta
4000 0000 0000 9995Rechaza por fondos (MOCK_51 · "Insufficient funds")Un código distinto, para que tu integración muestre dos motivos diferentes
4000 0000 0000 0119No 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.