Después de recibir su matriz de pruebas

📘

Consideraciones previas a su sesión de certificación

Al contar ya con la matriz de pruebas que NetPay le ha entregado, filtrada para su integración, este documento reúne de forma sintetizada las consideraciones que conviene tener resueltas y presentes antes de la sesión de certificación en la que la completará: cómo se organiza el documento y qué le corresponde llenar en cada hoja, las reglas que su sistema debe cumplir, los pasos de los bloques que deben provocarse en la terminal, el significado de cada estatus y los puntos que con mayor frecuencia obligan a repetir una prueba.

Si dispone de poco tiempo, le sugerimos comenzar por el último apartado.

Forma parte de la Guía de Certificación de Integración NetPay.


1. Cómo está organizada su matriz de pruebas

Su matriz de pruebas es un documento de hojas de cálculo. Cada hoja cubre una parte del proceso, y en todas ellas las celdas que le corresponde llenar están marcadas con borde punteado.

HojaQué contieneQué llena usted
InformaciónEl expediente del proyecto: contactos, datos de la integración y datos de la terminal certificada.La columna Respuesta del COMERCIO, en los tres bloques.
CuestionarioLas preguntas técnicas, con la Condición —el resultado que NetPay espera leer— y la Restricción que indica su nivel.La columna Respuestas DETALLADAS.
TICKET-PERSONALIZADOSolo aparece si desactivó el voucher oficial de NetPay.Los campos y las evidencias del ticket propio.
PruebasLos escenarios que debe ejecutar, con el tipo de tarjeta, los resultados esperados y la restricción de ejecución.Los Comentarios (COMERCIO / NETPAY) y el JSON original entregado a su sistema.
EvidenciasUna fila por escenario, para adjuntar las capturas.El JSON de venta, la imagen del voucher y las capturas de su punto de venta.

Las columnas de Estatus y de Comentarios de NetPay las completa el equipo de integraciones durante la revisión: no deben modificarse.

⚠️

El trabajo se realiza sobre el documento que NetPay le compartió

Le sugerimos no reconstruirlo, copiarlo a otro archivo ni reordenar sus filas. La numeración de los escenarios y el vínculo entre las hojas Pruebas y Evidencias dependen de esa estructura, y la revisión se realiza sobre ese mismo documento.

📘

Su matriz de pruebas ya trae el alcance aplicado

Las preguntas y los escenarios que contiene son los que corresponden a su tipo de integración, sus APIs adicionales y su marca de terminal. Si su alcance cambia durante el proyecto, avise al equipo de integraciones: la matriz de pruebas debe regenerarse.


2. Material que debe preparar

Le recomendamos reunir los siguientes elementos antes de comenzar. Su ausencia es la causa más frecuente de retraso en una certificación.

La terminal de pruebas

La solicita su asesor comercial o distribuidor de NetPay, no el equipo de integraciones, y debe entregarse en modo de pruebas.

La configuración exacta no es única: depende del modelo, de la marca, de la versión del procesador de pagos y del tipo de integración, y la combinación varía de un caso a otro. Por eso el equipo de integraciones indica en cada solicitud qué versiones corresponden. En términos generales, al recibir la terminal conviene tener identificado y confirmado lo siguiente:

  • El modelo y la marca del equipo.
  • La versión de Smart PinPad instalada.
  • La versión de la aplicación de soporte y del launcher.
  • Los servicios de Google instalados, cuando el tipo de integración lo requiera.
  • Si la terminal debe entregarse en modo debug, como ocurre en las integraciones por SDK.

La terminal no debe tener instalada la App de Pagos

Es el error de configuración que con más frecuencia impide iniciar una certificación. Si la terminal llega con la App de Pagos instalada, o con versiones distintas de las indicadas para su caso, le sugerimos reportarlo con su asesor comercial o distribuidor sobre el mismo ticket en el que se solicitó, para que el área de almacén de NetPay pueda revisarlo. Una vez recibida la terminal, es recomendable contactar al equipo de integraciones para verificar que la configuración sea la correcta antes de comenzar.

Credenciales de prueba

Las credenciales de acceso a la aplicación Smart PinPad Dev y las de generación del token no se publican en la documentación. Por política de seguridad, el equipo de integraciones las envía por correo únicamente a los prospectos que han seguido el proceso comercial correspondiente. Si aún no las ha recibido, puede solicitarlas por ese mismo medio.

Material complementario

ElementoDetalle
StoreId de pruebasEl o los StoreId asignados. Cada uno tiene un propósito: base, factura, fraude, CheckIO, Smart Accounts.
Tarjetas físicasDébito con NIP, crédito con NIP, una tarjeta sin NIP para firma autógrafa, contactless VISA y contactless MASTERCARD.
Tarjetas de cashbackÚnicamente si aplica, con alguno de los BINes autorizados.
Datos del proyectoLenguaje o framework de frontend y de backend, IDE, nombre y versión de su sistema, packageName, versión mínima y máxima de Android, o versión de .NET Framework y arquitectura de Windows. En integraciones por COM, la versión de .NET Framework debe ser 3.5 o superior.
Número de serie de la terminalSe encuentra en la parte inferior trasera del equipo. Es el dato que el equipo de integraciones solicita en primer lugar ante cualquier consulta de soporte.

Ambiente: las pruebas se ejecutan en el ambiente de PRUEBAS. Su sistema debe poder alternar entre los ambientes de pruebas y producción mediante configuración (URL base, path y body del token), sin necesidad de recompilar.

⚠️

Sobre el NIP durante las pruebas

Siguiendo la documentación, ningún cobro del ambiente de pruebas es real y no se genera cargo alguno a las tarjetas utilizadas. El NIP es la única excepción: se valida directamente con el banco emisor, por lo que debe ingresarse correctamente. Tres o más intentos incorrectos pueden ocasionar el bloqueo de la tarjeta.


3. La documentación de referencia, por canal

La mayor parte de lo que la certificación evalúa ya se encuentra documentada. Dado que la documentación está organizada por canal, esta guía mantiene la misma separación: le sugerimos consultar únicamente la pestaña correspondiente a su implementación. Una integración por SDK no configura una URL de regreso, y una integración por API no compila una aplicación para la terminal.

Si alguna de sus respuestas no coincide con lo indicado en la página correspondiente, es probable que ese punto se reabra durante la revisión.

Este es el orden de lectura que sigue el equipo de integraciones al entregar la documentación:

#TemaPágina
1Panorama de la integración por APIIntroducción
2Configurar la terminal y la URL de regresoConfiguración inicial de la terminal — incluye los certificados SSL: ISRG ROOT X1 no funciona en Android 7 o inferior
3Generar el token de accesoAutorización y generación de token
4Enviar una venta y sus camposVenta
5Cancelar una ventaCancelación — el límite es a las 20:00, hora de Ciudad de México, del mismo día
6Reimprimir por orderIdReimpresión por orderId
7Reimprimir por folioReimpresión por folio
8Recibir la respuesta en su webhookRecibiendo la respuesta — su webhook debe responder HTTP 200 con {"code":"00","message":"Recibido"}, o la terminal dejará de recibir transacciones
9Recuperar una venta que no llegó a su sistemaRecuperación de información no entregada
10ReversosManejo de reversos por integración API
11Check-in y check-out por API (si aplica)Integración Checkin API / Checkout API

Si su integración opera con varios StoreId de un mismo grupo, la referencia correspondiente es Smart Accounts.

Las páginas de check-in/check-out y de Smart Accounts no aparecen listadas en el índice público: se consultan por enlace directo.

📘

Temas cubiertos exclusivamente en esta guía

Algunos temas que la certificación evalúa aún no cuentan con una página propia: el cashback y sus condiciones mínimas, los tiempos de espera, el bloqueo de multi-instancias y el check-in por COM. En estos casos, la presente guía constituye la referencia aplicable, y cualquier detalle adicional puede solicitarse por correo al equipo de integraciones.


4. Reglas transversales que su sistema debe cumplir

Estas reglas se repiten a lo largo del cuestionario y de varios escenarios. Conviene resolverlas desde el principio, ya que cada una de ellas afecta a un bloque completo de la certificación.

Tiempos de espera

DóndeLo que se espera de su sistema
BackendUn webhook, o hilos que permanezcan a la espera de la respuesta. Si en su lugar utiliza un temporizador, debe ser de 3 minutos para venta normal y 5 minutos para venta con cashback, con un intervalo que consulte de forma continua si la respuesta ya llegó.
FrontendUn indicador de carga que permanezca en espera. Si utiliza un temporizador, los mismos 3 y 5 minutos, o bien espera sin límite de tiempo. Si el usuario completa la transacción antes, su sistema debe recibir la respuesta antes de que expire esa espera.
SDKLos métodos nativos onActivityResult o registerForActivityResult(). Si en su lugar utiliza un temporizador, aplican los mismos tiempos.
COMEl intervalo con el que consulta getResponse debe estar entre 500 ms y 2 000 ms, y el tiempo total de espera recomendado es de 3 minutos como mínimo.

Bloqueo de multi-instancias

Su sistema no debe permitir enviar dos ventas al mismo tiempo: tras el primer envío, el control debe quedar bloqueado hasta recibir la respuesta, y la operación no debe generar ventas duplicadas. La misma regla aplica a la cancelación: pulsar el botón varias veces seguidas no debe producir intentos duplicados.

El campo con el que se valida el resultado

responseCode con valor 00 indica transacción aprobada; cualquier otro valor representa un error o una declinación. En SDK también es válido el campo success. El texto impreso en el ticket no es una fuente válida para determinar el resultado.

Cancelación

Debe realizarse el mismo día de la venta y, como referencia, antes de las 20:00 hora de Ciudad de México.

Restricciones de red en sus sucursales

📘

El firewall de sus sucursales puede bloquear las transacciones

Es una causa frecuente de fallas que aparecen solo en algunas sucursales y no en el ambiente de desarrollo. Si su red aplica controles de acceso o filtrado de tráfico, deben habilitarse las URLs, los puertos y las direcciones IP que utiliza la comunicación con NetPay, tanto en pruebas como en producción.

Por tratarse de información sensible, el listado vigente se mantiene en un documento de acceso restringido: matriz de URLs y puertos. Al abrirlo se le pedirá solicitar acceso; la autorización la otorga el equipo de integraciones. Conviene aplicar la configuración antes de la sesión de certificación, ya que una restricción de red no detectada a tiempo detiene la ejecución de los escenarios.

Autenticación · solo en integraciones por API

El token de acceso debe regenerarse de forma periódica —por ejemplo, cada 6 u 11 horas—. El refresh token no está disponible actualmente, por lo que no debe utilizarse ni implementarse.

Desconexión del cable · solo en integraciones por COM

El método depende de la versión de la DLL: con la 1.5.5.2 el puerto COM asignado se valida con findPortByDescription(); a partir de la 1.7.0 se dispone de testConnection(). Es lo que se comprueba en el escenario de desconexión de cable, por lo que le sugerimos confirmar por correo con el equipo de integraciones qué versión corresponde a su proyecto.

Recuperación de una venta por orderId

Cuando recupere mediante la reimpresión por orderId una venta que no llegó a su sistema, ese valor debe tomarse del ticket físico impreso, nunca de otra fuente.


5. El ticket personalizado

Va antes que el resto por una razón práctica: cuando el ticket personalizado aplica, se certifica antes que las demás pruebas, y si más adelante se modifica, las evidencias ya entregadas deben repetirse. Si mantiene el voucher oficial de NetPay, puede pasar directamente al apartado 6.

Casos en los que aplica

flowchart TD
    A{"¿Aplica el ticket<br/>personalizado?"}
    A -->|"mantiene el voucher<br/>oficial de NetPay"| Z["No se evalúa"]
    A -->|"lo desactiva, o la<br/>terminal no imprime"| B{"¿Cumple la<br/>versión mínima?"}
    B -->|"por debajo"| N["Ticket Personalizado<br/>No Certificado"]
    B -->|"SDK 1.1.9<br/>DLL 1.6.0"| C{"¿Smart PinPad<br/>2.0 o mayor?"}
    C -->|"no"| N
    C -->|"sí"| D{"¿Certificado antes<br/>y sin cambios?"}
    D -->|"sí"| E["Se puede omitir"]
    D -->|"no"| F["Debe certificar<br/>su ticket personalizado"]

Dos condiciones encadenadas: primero la versión correspondiente a su canal y después la de la terminal. El incumplimiento de cualquiera de ellas no deja el punto pendiente, sino que lo registra como «No Certificado».

Los cuatro requisitos aplicables

#Condición
1Integración SDK → versión 1.1.9 en adelante.
2Integración COM → versión 1.6.0 en adelante.
3Terminal IM30 o Aries8 → certificar ticket personalizado es obligatorio.
4Todas las integraciones con ticket personalizado → Smart PinPad 2.0 en adelante.
⚠️

Consecuencia de no cumplir los requisitos

Cuando el ticket personalizado no puede certificarse, NetPay lo registra explícitamente como «Ticket Personalizado 'No Certificado'». Deshabilitar el voucher oficial sin haber certificado el propio implica asumir los riesgos operativos correspondientes, así como las implicaciones frente a la normativa bancaria vigente.

Detalle para quienes deben certificarlo

Si tras el diagrama anterior confirmó que debe certificar su ticket, despliegue lo que sigue. Si mantiene el voucher oficial de NetPay, puede omitirlo por completo.

Campos que se revisan en el ticket

Se valida que su ticket impreso contenga la misma información que el voucher oficial. Cada campo se marca como OK cuando el ticket lo cumple, y se adjunta la captura del ticket junto con el JSON de respuesta correspondiente.

Qué se imprimeCampo de la respuestaReglaRestricción
LogotipoEl del comercio.Opcional
AFILIACIÓN: <valor>affiliationObligatorio
TIPO DE TRANSACCIÓN: <valor>transTypeSe traduce el valor: AVENTA, VCANCELACIÓN, PRECHECK IN, POACHECK OUT. PRE y POA solo se devuelven en la operativa de check-in y check-out.Obligatorio
Dirección del comerciostreetNameSolo el valor, sin etiqueta.Obligatorio
NÚMERO DE COMERCIO: <valor>storeIdObligatorio
Población del comerciocityNameSolo el valor, sin etiqueta.Obligatorio
NÚMERO DE CUENTA: ************<valor>cardNumber · spanRoutePrioridad a cardNumber; si no trae valor, se usa spanRoute. 12 asteriscos para VISA y MasterCard, 11 para AMEX; se distingue con cardTypeName cuando devuelve AMEX o AmericanExpress.Obligatorio
<valor> / <valor> / <valor>cardTypeName · bankName · cardTypeLos tres, separados por diagonal y en ese orden. cardType se traduce: CCRÉDITO, DDÉBITO, VVALERA. Si alguno llega vacío, nulo o con valor U, no se imprime.Obligatorio
RETIRO DE EFECTIVO: $<valor>cashbackAmountObligatorio si aplica
COMISIÓN POR RETIRO: $<valor>cashbackFeeObligatorio si aplica
SUBTOTAL: $<valor>calculadoCon cashback: amountcashbackAmountcashbackFee. Con propina: se usa tipLessAmount.Obligatorio si aplica
PROPINA: $<valor>tipAmountObligatorio si aplica
<valor> MESES SIN INTERESESpromotionEl número de meses es dinámico.Obligatorio si aplica
TOTAL: M.N. $<valor>amountEn negritas, con el símbolo de moneda (M.N. para moneda nacional) y de uno a dos puntos más de tamaño de letra.Obligatorio
FOLIO: <valor>folioNumberObligatorio
LOT NUM: <valor>moduleLoteObligatorio
CARGO: <valor>moduleChargeObligatorio
TERMINAL: <valor>terminalIdObligatorio
RRN: <valor>rrnNumberObligatorio
ORDERID: <valor>orderIdObligatorio
APROBACIÓN: <valor>authCodeObligatorio
FECHA Y HORA: <valor>transDate · ticketDatePrioridad a transDate; si no trae valor, se usa ticketDate.Obligatorio
ARQC: ************<valor>arqcSe ocultan todos los dígitos salvo los cuatro últimos. Si llega vacío o nulo, no se imprime.Obligatorio
TC: ************<valor>transactionCertificateSe ocultan todos los dígitos salvo los cuatro últimos.Obligatorio
AID: <valor>aidObligatorio
APP LABEL: <valor>applicationLabelSi llega vacío o nulo, no se imprime.Obligatorio
Leyenda de verificación del tarjetahabientehasPin · hexSignSolo el valor, sin etiqueta. La regla completa está en el diagrama de abajo.Obligatorio
Nombre del tarjetahabientecustomerNameSolo el valor, sin etiqueta. Si llega vacío o nulo, no se imprime.Obligatorio
COPIA CLIENTELeyenda de la primera impresión del ticket.Obligatorio
COPIA NEGOCIOLeyenda de la segunda impresión del ticket.Opcional
Leyenda de NetPay«RECUERDA QUE EN TU ESTADO DE CUENTA EL CARGO APARECERÁ A NOMBRE DE NETPAY».Obligatorio
Versión de la aplicaciónrePrintDateSolo el valor, sin etiqueta.Obligatorio
Ticket Personalizado de <nombreComercio>Con el nombre del comercio que se certifica.Obligatorio

Leyenda de verificación del tarjetahabiente: los tres casos posibles

flowchart TD
    A["Respuesta de la venta"] --> B{"¿hasPin<br/>es true?"}
    B -->|"sí"| C["FIRMADO<br/>ELECTRÓNICAMENTE"]
    B -->|"no"| D{"¿hexSign trae<br/>algún valor?"}
    D -->|"sí"| E["FIRMA<br/>DIGITALIZADA"]
    D -->|"no"| F["AUTORIZADO<br/>SIN FIRMA"]

La leyenda no se elige: se determina a partir de esos dos campos, evaluados en este orden.

📘

El tercer caso se presenta porque, en operaciones contactless por debajo de ciertos montos que varían según la marca, no se solicita NIP ni firma.

Tickets que se certifican

Se revisan cuatro tickets, y el de venta se valida en ocho variantes. Cada una requiere su captura y su JSON.

TicketVariantes que se revisan
VentaCon NIP débito · Sin NIP, con firma digital · Contactless MasterCard mayor a $1,501 · Contactless MasterCard menor a $10 · A meses sin intereses · Con propina · Con cashback · Check-in
ReimpresiónReimpresión, por folio o por orderId, de una venta exitosa.
CancelaciónCancelación de una venta.
DeclinaciónDeclinación de una transacción, por cualquier motivo.

Lo que cambia en cada uno respecto del ticket de venta

TicketDiferencia
ReimpresiónAñade la leyenda -----DUPLICADO-----, con cinco guiones antes y cinco después, a partir del campo isRePrint cuando devuelve true. Es obligatoria en el escenario de reimpresión de una declinación.
CancelaciónEl total se imprime en negativo: TOTAL: M.N. -$<valor>.
DeclinaciónEs el ticket más corto de los cuatro: 22 campos frente a los 33 de la venta. Añade tres elementos —la leyenda -----DUPLICADO----- a partir de isRePrint, el responseCode y el message, estos dos impresos solo con su valor y sin etiqueta— y omite los que no existen en una transacción rechazada: retiro de efectivo, comisión por retiro, subtotal, propina, RRN, ORDERID, APROBACIÓN, ARQC, TC, AID, APP LABEL, la leyenda de verificación del tarjetahabiente, el nombre del tarjetahabiente y la leyenda de NetPay.

6. Cómo se evalúa cada punto

Cada escenario de la hoja Pruebas se ejecuta en la terminal y se respalda con la captura del ticket y el JSON de respuesta de esa misma transacción.

Criterio de evaluación de cada escenario

flowchart TD
    A["Consulta el escenario<br/>que le corresponde"] --> B["Ejecuta la prueba<br/>en la terminal"]
    B --> C["Resguarda el ticket<br/>y el JSON"]
    C --> D["Los entrega<br/>como evidencia"]
    D --> E{"NetPay contrasta<br/>con lo esperado"}
    E -->|"cumple"| F["Realizado"]
    E -->|"parcial"| G["A<br/>Mejorar"]
    E -->|"no<br/>existe"| H["No<br/>Implementado"]
    E -->|"faltó<br/>material"| I["No<br/>realizado"]

Los cuatro estatus posibles no representan grados de una misma condición: dos se refieren al alcance de su sistema y dos a la ejecución de la prueba. De ahí la importancia de contar con todo el material antes de iniciar.

Niveles de obligatoriedad

NivelQué significa
Obligatoria · Condición obligatoria.Se ejecuta o se responde en todos los casos. Es indispensable para concluir la certificación.
Obligatoria solo si aplicaAplica únicamente si su sistema ofrece esa funcionalidad (MSI, propina, cancelación, NFC…). Si no la ofrece, se registra como No Implementado, y eso no impide cerrar la certificación.
Recomendada · Recomendada.No condiciona la certificación, aunque NetPay sugiere su ejecución.
Opcional.Su ejecución queda a criterio del comercio.

Evidencia que debe entregar

Para cada escenario que así lo requiere, se adjunta:

  1. La captura del ticket impreso por la terminal.
  2. El JSON de respuesta recibido por su sistema.

Ambos elementos deben corresponder a la misma transacción. La discrepancia entre ellos —el ticket de una prueba acompañado del JSON de otra— es la observación más frecuente de todo el proceso.


7. Bloques que requieren pasos concretos

Dos bloques de su matriz de pruebas no se resuelven leyendo el resultado esperado: es necesario provocar la situación en la terminal. Estos son los pasos.

Reversos, de implementación obligatoria

Un reverso se produce cuando la comunicación se interrumpe a mitad de una transacción. Aplica a los tres canales y su manejo mediante la reimpresión por folio es de implementación obligatoria. Es un flujo poco frecuente, pero conviene dejarlo resuelto durante la certificación: cuando está bien implementado, el propio sistema del comercio resuelve el caso sin necesidad de consultarlo con NetPay. Existen dos tipos, con comportamientos distintos: el automático, que la terminal resuelve por sí sola, y el manual, que necesita una transacción posterior para completarse.

⚠️

Los pasos y los mensajes descritos en este bloque corresponden a terminales Pax. En Urovo y en Kozen el flujo de reversos puede diferir; le sugerimos confirmarlo con el equipo de integraciones si su terminal es de alguna de esas marcas.

flowchart TD
    S["Venta en curso<br/>tarjeta y NIP"]
    S --> P["Procesando<br/>Autorización"]
    P -->|"se<br/>completa"| A["APROBADA"]
    P -->|"se retira<br/>la tarjeta"| DEC["DECLINADA<br/>código 05"]
    P -->|"se apaga<br/>la terminal"| SIN["SIN<br/>RESPUESTA"]
    A --> AC["Reimpresión:<br/>Aprobada · C"]
    DEC --> RC["Reimpresión:<br/>Reversada · RV"]
    RC --> FIN1["Reverso automático<br/>concluido"]
    SIN --> PC["Reimpresión:<br/>Pendiente · PRV"]
    PC --> V2["Venta normal<br/>el mismo día"]
    V2 --> RC2["Reimpresión:<br/>PRV pasa a RV"]
    RC2 --> FIN2["Reverso manual<br/>concluido"]
    classDef ok fill:#e8f5e9,stroke:#43a047,color:#1b5e20
    classDef ko fill:#fff3e0,stroke:#fb8c00,color:#e65100
    classDef nd fill:#ffebee,stroke:#e53935,color:#b71c1c
    class A,AC,FIN1,FIN2,RC,RC2 ok
    class DEC,PC ko
    class SIN nd

Los tres desenlaces de una venta y el valor que devuelve la reimpresión por folio en cada uno. La rama central corresponde al reverso automático y la rama derecha al reverso manual: en esta última, la transacción permanece en «Pendiente por Reversar» hasta que una venta posterior del mismo día detona el reverso. Los pasos exactos para provocar cada rama se detallan a continuación.

Cómo reproducir cada escenario

Los pasos exactos están abajo. Despliéguelos cuando vaya a ejecutar las pruebas.

Pasos para reproducir el reverso automático
  1. Lance una venta por cualquier monto.
  2. Inserte la tarjeta para iniciar el flujo de autorización.
  3. Ingrese el NIP cuando la terminal lo solicite, pero no presione «Enviar».
  4. Presione el botón verde para continuar con la autorización, cuente dos segundos y retire la tarjeta de inmediato.
  5. Obtendrá una declinación por «Error de lectura» o «Error de conexión», acompañada de responseCode con valor 05.
  6. Su sistema debe poder reimprimir declinaciones, al menos para este tipo de casos.
  7. Reimprima el voucher de esa transacción: debe obtener el mensaje «Transacción Reversada».
Pasos para reproducir el reverso manual
  1. Lance una venta por cualquier monto.
  2. Inserte la tarjeta e ingrese el NIP, presionando el botón verde para continuar.
  3. Cuando la terminal solicite retirar la tarjeta, no la retire.
  4. Apague la terminal por completo. Puede hacerlo desde el botón de apagado o retirando la fuente de alimentación; lo importante es que el equipo quede sin energía en ese momento. Su punto de venta no recibirá respuesta alguna, y por eso debe estar preparado para reimprimir en estos escenarios.
  5. Con la terminal apagada, retire la tarjeta y vuelva a encenderla.
  6. Realice una reimpresión: obtendrá «Transacción Pendiente por Reversar», lo que indica que la venta aún no se ha reversado.
  7. Para forzar el reverso, lance una venta normal por cualquier monto y complete la autorización hasta obtener el voucher de venta. Esa transacción detona el reverso pendiente.
  8. Reimprima desde su punto de venta la transacción que quedó pendiente: ahora obtendrá «Transacción Reversada».

El voucher personalizado en los escenarios de reverso: son dos impresiones

Si su integración emite su propio voucher, cada uno de estos escenarios produce dos tickets distintos, y ambos se entregan como evidencia.

1 · El de la venta declinada. Es la variante de declinación de su voucher, e incluye el responseCode original —05 o el que entregue la terminal para ese error— y el mensaje original del error en una línea.

2 · El de la reimpresión por folio. Es un ticket aparte, con la leyenda -----DUPLICADO----- cuando isRePrint devuelve true, y con el mensaje que entrega la reimpresión: «Transacción Reversada» o «Transacción Pendiente por Reversar».

Sus campos son los de la tabla Revisión de ticket de Declinación de la hoja TICKET-PERSONALIZADO, que es una de las cuatro que se certifican.

Los escenarios que se ejecutan y se evalúan

EscenarioCriterio de aprobación
Reverso automáticoLa declinación llega con responseCode 05 y el reverso se realiza de forma automática.
Reimpresión por folio del reverso automáticoMensaje «Transacción Reversada» y reprintModule con valor RV.
Reverso manualLa transacción queda en «Pendiente por reversar».
Reimpresión por folio del reverso manualMensaje «Transacción Pendiente por Reversar» y reprintModule con valor PRV.
Venta posterior al reverso manualLa nueva venta se aprueba y detona el reverso de la anterior.
Reimpresión por folio después del reversoLa transacción que estaba pendiente ya aparece como reversada: el mensaje cambia a «Transacción Reversada» y reprintModule pasa de PRV a RV.
Reimpresión por folio del reverso en Urovo CoreX · solo SDK en terminal UrovoAdemás de RV, devuelve responseCode con valor R.
Voucher personalizado de la declinaciónSolo si genera su propio voucher: se entregan los dos tickets descritos arriba, el de la venta declinada y el de la reimpresión.

Los valores que devuelve la reimpresión por folio

Si almacena estos escenarios en su base de datos, los estatus de esas ventas deben actualizarse. El campo que debe consultar es reprintModule dentro del objeto JSON de respuesta, no responseCode:

ValorSignifica
CTransacción aprobada
VTransacción cancelada
DTransacción declinada
RVTransacción reversada
PRVPendiente por reversar: se requiere una transacción más en el mismo día

En terminales Urovo con CoreX, la reimpresión posterior al reverso devuelve además responseCode con valor R. En el escenario de reverso automático sobre CoreX en integraciones SDK, la respuesta llega con message «Transacción Reversada», reprintModule con valor RV y responseCode con valor R40.

La terminal es la fuente de verdad

Ante cualquier discrepancia de estatus entre NetPay Manager y la terminal, debe prevalecer el resultado de la reimpresión por folio en la terminal. Ninguna otra consulta es una fuente válida para determinar el estatus de un reverso.


Check-in y check-out, si su integración lo incluye

Aplica únicamente a las modalidades checkinAPI-checkoutAPI, checkinSDK-checkoutAPI y checkinCOM-checkoutAPI. Si la suya no es una de ellas, puede omitir este apartado.

Cómo funcionan el check-in y el check-out

El check-in se envía desde su propio canal —API, SDK o COM— con la misma petición de venta de siempre, activando la bandera checkIn en true. Lo procesa la terminal como cualquier venta, así que imprime el ticket oficial de NetPay, y la respuesta llega por su vía habitual: el webhook en API, el onActivityResult en SDK. En esa respuesta, transType devuelve PRE y preAuth devuelve 1.

El check-out es distinto: se consume en una API independiente de la terminal. El equipo no interviene, no imprime nada, y por eso el comprobante del cierre se obtiene con la reimpresión por folio.

flowchart TD
    A["Check-in desde su canal<br/>checkIn: true"] --> B["La terminal procesa<br/>la preautorización"]
    B --> C["Imprime el ticket oficial<br/>de NetPay"]
    C --> D["Respuesta con transType PRE<br/>y transactionId"]
    D --> E["Check-out por la API CheckIO<br/>con storeId, transactionId<br/>y totalAmount"]
    E --> F["La API confirma el cierre<br/>sin imprimir ticket"]
    F --> G["Reimpresión por folio<br/>para obtener el comprobante"]
    classDef term fill:#e8f0fe,stroke:#4a6fa5,color:#12233d
    classDef api fill:#fff4e5,stroke:#c98a2e,color:#4a3208
    class A,B,C,D,G term
    class E,F api

En azul, lo que pasa por la terminal; en ámbar, lo que ocurre fuera de ella. El check-out siempre es por API, sea cual sea el canal del check-in, y es el único paso que no deja ticket impreso.

El campo que enlaza las dos operaciones es transactionId

No es el folio ni el orderId. El transactionId viene en la respuesta del check-in y es el valor con el que después se cierra el check-out, así que su sistema debe guardarlo. El cuerpo del check-out lleva únicamente storeId, transactionId y totalAmount.

Lo que responde la API de check-out

El servicio se autentica con una api-key que se envía en el encabezado Authorization. Es única por COMPANY y solo sirve para los STORE que pertenecen a esa COMPANY; NetPay entrega la URL y la clave por correo, distintas en pruebas y en producción.

RespuestaQué significa
202 · code 00Cierre aprobado. Devuelve el transactionId de la nueva transacción.
202 · code 05Ese check-in ya tenía un check-out: no se puede volver a cerrar.
409 · code 04No se encontró el check-in con ese transactionId.
409 · code 06El StoreId no tiene habilitada la operativa de check-in y check-out.
409 · code 08Error de NetPay: debe reportarse al equipo de soporte.
409 · code 09El monto excede lo permitido para cerrar.
401 · sin codeLa api-key no tiene permisos sobre ese StoreId.

Un 200 OK sin contenido no es un cierre exitoso

Cuando la petición viene mal formada, el servicio responde 200 pero con el cuerpo vacío, y su sistema no debe interpretarlo como una transacción aprobada. Conviene validar que el JSON sea sintácticamente correcto, que storeId, transactionId y totalAmount estén presentes, y que el tipo de dato de cada uno sea el esperado.

⚠️

Un check-out con monto $0 actúa como una cancelación

No es un error del servicio: se acepta, y en NetPay Manager la operación queda registrada como un check-out con monto $0. Le sugerimos que su sistema impida enviarlo de forma accidental —por un campo vacío o un total sin calcular—, ya que el efecto es cerrar la preautorización sin cobro.

⚠️

Sobre el monto del check-out

El límite depende del giro del comercio. En giros gasolineros no se permite cerrar por encima del 100 % del monto preautorizado. Para el resto de los giros, la operativa admite hasta el monto original más un 20 %, y un intento superior se rechaza con el código 09.

A efectos de la certificación, conviene tener presente que el ambiente de pruebas hoy solo permite validar hasta el 100 %. Si su caso requiere cerrar por encima de ese porcentaje, le sugerimos confirmarlo por correo con el equipo de integraciones antes de la sesión.

La validación no debe quedar únicamente del lado de NetPay: el sistema del comercio también debe impedir el envío de un monto superior al permitido.

📘

Las referencias publicadas

Integración Checkin API / Checkout API para el check-in por API, e Integración de Check-in SDK para el check-in por SDK. El check-in por COM existe como funcionalidad, pero todavía no cuenta con una página propia: si su proyecto lo requiere, puede solicitarlo por correo al equipo de integraciones.


8. Interpretación de los estatus

Cada pregunta y cada escenario recibe un estatus durante la revisión. Esta tabla le será útil sobre todo cuando NetPay le devuelva sus resultados.

Significado de cada estatus
EstatusQuién lo poneQué significa
Pendiente / Pendiente ejecutarEstado inicialAún no se contesta o no se ejecuta.
Falta validar si lo implementó el comercioNetPayEs el estatus inicial de los escenarios opcionales. NetPay aún no sabe si esa funcionalidad existe en su sistema y espera su confirmación para incluirlos o descartarlos.
En revisiónNetPayRecibido y en evaluación.
Realizado ✔ / OKNetPayCumple el resultado esperado.
A MejorarNetPayOpera correctamente, aunque presenta áreas de oportunidad que deben atenderse.
No ImplementadoNetPayLa funcionalidad no existe en su sistema.
No AplicaNetPayNo corresponde a su tipo de integración.
No realizado debido a falta de insumosNetPayNo fue posible ejecutarlo por ausencia de tarjeta, StoreId, versión o terminal. Es el estatus que con mayor frecuencia se evita reuniendo el material descrito en el apartado 2.
Ticket Personalizado 'No Certificado'NetPayEl ticket propio no cumplió los requisitos del apartado 5.

9. Puntos importantes que pueden retrasar la certificación

Estos son los puntos que con más frecuencia obligan a repetir una prueba o a reabrir un punto durante la revisión. Le sugerimos leerlos antes de empezar a llenar su matriz de pruebas, no después.

Lo que con más frecuencia genera retrasos

  1. Definir tarde el alcance. Cambiar el tipo de integración con el trabajo ya avanzado modifica las preguntas y los escenarios que aplican, y obliga a revisar de nuevo lo ya respondido.
  2. Responder el cuestionario sin verificar. Cada respuesta se contrasta con el comportamiento observado durante las pruebas, y cualquier incongruencia reabre el punto.
  3. Tiempos de espera insuficientes. Un temporizador de 60 segundos en el frontend compromete buena parte del bloque de esperas.
  4. Folio no único. Si el folio se repite entre sucursales o en operaciones declinadas, la recuperación por reimpresión deja de ser posible y varios escenarios quedan sin resolver.
  5. Evaluar el resultado con un campo distinto al indicado. El campo aplicable es responseCode (00), o success en SDK; no el texto impreso en el ticket.
  6. Utilizar Print-Ticket para consultar el estatus de reversos. La documentación indica que no es fiable para ese fin; debe emplearse la reimpresión por folio.
  7. Enviar el orderId corto en devoluciones. La API de devoluciones requiere el orderId largo que devuelve Print-Ticket.
  8. Evidencias cruzadas. El ticket de una prueba acompañado del JSON de otra.
  9. Iniciar la sesión sin el material requerido. Sin tarjeta contactless, sin un BIN habilitado para cashback o sin la versión mínima de Smart PinPad, la prueba se registra como No realizado por falta de insumos.
  10. Desactivar el voucher oficial sin certificar el propio. Conduce directamente al estatus Ticket Personalizado 'No Certificado'.

Precisiones sobre funcionalidades concretas

Los dos primeros aplican a cualquier integración; los siguientes solo si su sistema ofrece esa funcionalidad, por lo que se presentan plegados.

Aplica a toda integración

El manejo de reversos es de implementación obligatoria

No es opcional ni depende de su tipo de integración: aplica a API, SDK y COM por igual, y se resuelve mediante la reimpresión por folio. Es un flujo poco frecuente y, precisamente por ello, suele quedar para el final y llegar sin implementar a la sesión de certificación. Los dos tipos de reverso, los pasos para provocar cada uno y los valores que devuelve la reimpresión están en el apartado 7.

Una venta de su sistema puede corresponder a varias transacciones en la terminal

Ocurre en las ventas parciales y en cualquier cobro que se liquide con más de una tarjeta o en más de un intento. Para su sistema es una sola venta, con un importe único y un solo registro en su base de datos; para la terminal son transacciones independientes, y cada una tiene su propia autorización y su propio resultado.

Por esa razón, cada transacción enviada a la terminal debe llevar un folio distinto. Si dos cobros comparten el mismo folio, la consulta por folio devolverá únicamente uno de ellos y el otro quedará sin trazabilidad. Ese es precisamente el punto que se valida.

Aplica solo si su integración lo incluye

Propina · valor por defecto

En todos los escenarios de propina, el valor propuesto por defecto debe ser inferior al 25 % del monto de la venta. Es el único requisito transversal del bloque: el resto de los escenarios de propina ya vienen listados en su matriz de pruebas.

Devoluciones · si su integración las incluye

Una devolución, total o parcial, se considera exitosa cuando el campo code devuelve el valor 02. Cualquier otro valor debe tratarse como un error y así debe registrarlo su sistema.

Cashback · solo en integraciones por COM

El cashback está disponible únicamente en integraciones por COM, en la variante COM (con cashback). Si su integración es por API o por SDK, este apartado no le aplica.

Las cinco condiciones del cashback

Para que la terminal ofrezca cashback deben cumplirse las cinco de forma simultánea: monto mínimo de venta, monto mínimo de retiro, StoreId habilitado para la operativa, Smart PinPad 2.4 o superior, y un BIN de tarjeta incluido en la lista autorizada. Si alguna no se cumple, la venta continúa sin cashback, y precisamente ese comportamiento es el que se valida.

El flujo de cashback tiene dos respuestas

La primera confirma el cashback; la segunda cierra la venta. Su sistema debe estar preparado para ambas, y también para que el usuario demore entre una y otra: puede emplear un minuto en insertar la tarjeta, uno o dos en ingresar el NIP con algún reintento y minuto y medio en confirmar el retiro, y aun así su sistema debe recibir la respuesta.

Si el cashback no se confirma en el punto de venta

La terminal devuelve una respuesta de timeout a los 2 minutos. Es uno de los escenarios de la certificación, y su sistema debe procesar esa respuesta sin quedar bloqueado.