|
El presente documento describe la mensajería que se utiliza entre el POS y la aplicación EMV/KIT.
EMVKIT es una utilidad que simplifica la integración y la comunicación con el medio de pago de tarjetas abstrayendo a la aplicación de punto de venta de procesos como:
Arquitectura general de EMVKIT
Como se observa en la imagen, EMVKIT se encarga de comunicarse con el PINPAD, desligando al aplicativo de punto de venta de dicha responsabilidad con el objetivo de simplificar la integración y con el Gateway de transacciones VTOL para procesar la autorización.
Esta librería se ejecutará de manera stand alone –autónoma– en el punto de venta, pudiendo iniciarse como servicio, transmitiendo una comunicación server TCP IP capaz de interpretar el protocolo VTOL. El mismo protocolo es utilizado para comunicarse con VTOL Server.
La integración entre la aplicación de punto de venta y EMVKIT será a través de la utilización de la librería cliente de VTOL, la que llamaremos librería cliente o librería liviana.
La aplicación de punto de venta solo debe incorporar esta librería liviana que le permitirá, mediante llamadas JAVA o .NET, construir los mensajes para comunicarse con EMVKIT.
EMVKIT tiene el siguiente alcance:
Es responsabilidad de la aplicación de punto de ventas:
En resumen, EMV/KIT se encargará de la comunicación con el PINPAD y Vtol, autorizando pagos en línea y actualizando información en el PINPAD. El POS enviará requerimientos solicitando que se realicen pagos, los cuales será responsabilidad de EMV/KIT realizar todas las validaciones necesarias y comunicarse con todos los componentes para responder al POS si el pago se pudo realizar o no, y el motivo de error.
A continuación, detallamos lo tipos de comunicaciones de EMV/KIT.
Comunicación por default de la aplicación, la cual mantiene la misma lógica presentada en el documento “VTOLCR-DB-Manual mensajeria POS - VTOL”.
Ejemplo de Respuesta:
Header | Mensaje | |
Longitud del mensaje (4 bytes) | Indica si el mensaje requiere respuesta o no (2 bytes) | Ejemplo: {25:20020426172836;1:5;2:1;27:00;26:ISO8583;28:Aprobado} |
Se debe realizar un PUT en el servicio EMVKit, la mensajería puede ser XML o JSON, a continuación un ejemplo del servicio:
PUT http://localhost:8080/bridge-pos-rest/service/emvKitMessage
<bridgeCoreRequest>
<connectionId>${connectionId}</connectionId>
<operation>emvKitAuthorize</operation>
<params>
<store>123</store>
<node>5</node>
<server>VD</server>
<trxType>Sale</trxType>
<dateTime>20181226105000</dateTime>
<amount>10099</amount>
<payments>1</payments>
<plan>0</plan>
</params>
</bridgeCoreRequest>
Cabeceras de petición:
Connection: keep-alive
Content-Type: application/xml;charset=UTF-8
Accept:application/xml
<?xml version="1.0" encoding="UTF-8" ?>
<bridgeCoreResponse>
<ack>0</ack>
<message></message>
<representation class="emvKitRepresentation">
<params>
<dateTime>20181226105000</dateTime>
<authorizationCode>012345</authorizationCode>
<withoutSign>false</withoutSign>
<responseCode>Iso8583</responseCode>
<field42>1</field42>
<posInputMode>Chip</posInputMode>
<posAuthenticationMethod>5</posAuthenticationMethod>
<lastTrxId>10</lastTrxId>
<productDescription>false</productDescription>
<criptograma>DE41234AA6A7F0B6</criptograma>
<amount>10099</amount>
<ticket>1</ticket>
<cardHolderName>PRG ORO</cardHolderName>
<cardType>Debito</cardType>
<store>123</store>
<node>5</node>
<applicationLabel>MasterCard</applicationLabel>
<isoCode>00</isoCode>
<authorizationMode>onLine</authorizationMode>
<responseMessage>APROBADA</responseMessage>
<aid>A0000000041010</aid>
<cardNumber>5499490516183381</cardNumber>
<electronicSign>false</electronicSign>
</params>
</representation>
</bridgeCoreResponse>
Nota: Todo campo que se obtenga de VTOL y no haya sido mapeado en la respuesta REST, será respondido de manera “fieldXX” donde XX es el número de campo obtenido de VTOL. Ver campo “field42”.
A continuación, enumeramos los tipos de transacciones necesarios para implementar pagos con tarjetas:
El flujo de mensajería mantiene la misma lógica que actualmente se enumera en el documento de mensajería “POS-VTOL”: “VTOLCR-DB-Manual Mensajería POS – VTOL MX.docx”.
En nuestro caso, los mensajes “AdditionalData” y “ResetKeys” son complementarios y relacionados a EMV/KIT y el flujo será explicado en este documento.
Dependiendo de los autorizadores e implementaciones, se han agregado funcionalidades adicionales, las cuales se encontrarán habilitadas o no dependiendo del autorizador, algunas funcionalidades son: “CashAdvance”, “CardPayment”, “QueryPan” y “LoadExceptionBins”.
Existen funcionalidades propias de cada autorizador o banco, para lo cual ciertas funcionalidades y parámetros se encuentran restringidos a estos en todo el documento, es importante que tenga en cuenta cuando se realizan las integraciones, los autorizadores o bancos que actualmente se manejan son:
A continuación, se muestra un simple diagrama, donde se puede visualizar un caso completo de comunicación entre POS – EMV/KIT – Pinpad – VTOL para pagos simples con tarjetas.
En este caso, es un simple caso sin errores, donde se realiza un pago con cierta tarjeta.
Existen mensajes que EMV/KIT no necesita procesar y por lo tanto se enviarán directamente a VTOL, actualmente estos mensajes son “CheckPending” y “UnSyncCompletion”, a continuación un diagrama con esta situación.
También puede darse el caso de requerir enviar un mensaje a VTOL con datos leídos por un dispositivo externo, en ese caso, si un “Sale” o un “Refund” se envía con el campo InputMode (#10) presente se seguirá este proceso también.
A partir de este momento, en los diagramas no visualizaremos la comunicación con el Pinpad ni con VTOL ya que esto es responsabilidad del EMV/KIT.
En el próximo diagrama visualizamos un escenario con varios pagos parciales, al finalizar todos los pagos será necesario el envío de los “UnSyncCompletion”.
En caso de que antes de realizar el pago, no conozcamos los planes habilitados para la tarjeta que ingresaremos, será necesaria una interacción con EMV/KIT para informar estos planes:
Existen casos donde el Pos debe solicitar la inyección de llaves, esto sucede cuando el centro autorizador informa que se debe realizar una inyección de llaves “opcional”. Se pueden definir diferentes estrategias para realizar esta inyección, en este caso se debe revisar la documentación proporcionada por el autorizador. De acuerdo a algunas especificaciones, se solicita esta inyección en la carga de la aplicación, cuando es un nuevo día o cuando una transacción ha sido finalizada.
En todos los casos no se permite este tipo de mensaje mientras exista una transacción en curso.
Los campos son de longitud fija, numéricos, o alfanumérico. A continuación, se muestra el formato que se utilizará para determinar la representación de cada campo.
El campo de representación puede tener los siguientes formatos:
NX (F) Caracteres numéricos con longitud fija de X caracteres
NX (V) Caracteres numéricos con longitud variable de máximo X caracteres
AX (F) Caracteres alfabéticos, numéricos y/o especiales con longitud fija de X caracteres
AX (V) Caracteres alfabéticos, numéricos y/o especiales con longitud variable de máximo X caracteres
Si no se especifica (F) o (V) se considera por default una longitud variable (V)
Para los casos donde se especifica si un campo es requerido, las opciones son:
A continuación se definen los campos utilizados en la mensajería entre el Pos y EMV/KIT.
Tener en cuenta que algunos campos se encuentran relacionados al autorizador, por lo tanto estos solo servirán en esos casos (ejemplos de autorizadores: Banamex, Bancomer, etc.)
Estos mensajes tienen el mismo uso descripto en el documento “POS-VTOL”.
Los mensajes de “requerimiento” y de “respuesta” se mantienen idénticos.
Nota relacionada al UnSyncCompletion: Actualmente existe el “tercer mensaje embebido”, mismo que en esta mensajería podría utilizarse. El mensaje embebido se compone de los campos “19” y “24” y puede ser enviado con cualquier mensaje.
El único mensaje que no procesará estos campos será “resetKeys”.
Mensaje utilizado para realizar un pago parcial, sea de venta o devolución.
Cuando se recibe este mensaje, comienzan las validaciones, comunicación con el Pinpad y autorización con Vtol.
En caso de que no se reporten los planes y cuotas inicialmente desde el POS, la aplicación generará el error correspondiente (ver códigos de error) informando la cuenta para que la aplicación indique el plan que se desea utilizar mediante el mensaje “AdditionalData”.
Nota1: Si este mensaje contiene el campo InputMode (#10), este mensaje deberá estar constituido según documento: “VTOLCR-DB-Manual Mensajería POS – VTOL MX”, y se enviará de manera directa a VTOL. Para la cual se asume que la cuenta fue ingresada por otro medio y no se desea el ingreso por medio del pinpad.
Nota2: Mediante este mensaje es posible generar un “cashAdvance” (retiro de efectivo, sin realizar un pago, con solicitud de cuenta desde el pinpad). Se tratará como un “Sale” para poder obtener la información necesaria para generar el mensaje al autorizador, en caso de no desear la lectura de la cuenta por pinpad se podrá enviar el mensaje “cashAdvance” directamente (ver punto 7.8 CashAdvance).
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “Sale” o “Refund”. |
12 | amount | M | N10 | Monto de la transacción, los últimos 2 dígitos son decimales. El monto podrá enviarse en “0” en caso de transacciones de CashAdvance (retiro de dinero sin pago). |
14 | payments | O | N2 | Cantidad de cuotas/parcialidades (meses). 2 dígitos como máximo. En el caso de no enviarse este dato (campo 14 y 15), se generará una respuesta de código 12 (ver tabla capítulo 6) que contendrá el número de Tarjeta. De este modo, la aplicación de punto de venta podrá evaluar el número de tarjeta y determinar si aplica parcializar. Enviar el dato de pagos como AdditionalData (ver 5.3) |
15 | plan | O | A | Plan. 1 carácter de longitud. En el caso de no enviarse este dato (campo 14 y 15), se generará una respuesta de código 12 (ver tabla capítulo 6) que contendrá el número de Tarjeta. De este modo, la aplicación de punto de venta podrá evaluar el número de tarjeta y determinar si aplica parcializar. Enviar el dato de plan como AdditionalData (ver 5.3) |
16 | originalDate | C | yyyyMMdd | Este campo es mandatorio únicamente en devoluciones, es la fecha original del pago que estamos devolviendo. VTOL analiza si la operación fue del día en curso, hace Cancelación a través de reverso en línea. De ser de un día anterior, se informa vía Batch el movimiento como Devolución |
17 | originalTrxTicketNr | C | N | Este campo es mandatorio únicamente en devoluciones, es el número de ticket del pago original que se está devolviendo. |
22 | authorizationCode | O | A6 | Código de autorización telefónica. Este campo se encuentra presente únicamente si la transacción se autorizó offline por teléfono. |
23 | authorizationMode | O | A | Modo de Autorización: • Online = La autorización debe ser realizada por el Centro Autorizador. • Offhost = La autorización fue realizada internamente por VTOL. • Offline = La autorización fue realizada localmente por el POS. Es obligatorio el envío del campo 22 para estos casos. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
65 | additionalAmount | O | N10 | Se indica el monto a aplicar a cashBack o cashAdvance, valores posibles: “0” = indica que no se desea retirar. “YYYY” = Donde YYYY es el monto a retirar en cashback o cashAdvance. |
71 | checkPendingString | O | A | Indica si VTOL debe o no efectuar el chequeo de pendientes (se emplea para pagos parciales de tarjetas): • True = activa chequeo de pendientes. • False = desactiva chequeo de pendientes. |
80 | taxAmount | O | N | Únicamente para Visanet/Paradox: Cálculo de impuestos relacionado al pago que se está realizando. |
125 | posAuthenticationMethod | O | A | Solo para Banamex: En los casos donde se autorice mediante QPS (Sin firma) este campo debe ser enviado con valor “5” 5 = Transacción QPS (Quick Payment Service), pagaré sin firma. |
220 | paymentMobile | O | A | Únicamente para Banorte: Indica si nos encontramos en un pago mobile o no, lo cual habilita el ingreso manual o normal (chio/banda). · True: Modo mobile habilitado, solo ingreso manual. · False: Modo mobile deshabilitado, ingreso por chip o banda (valor por default si es inexistente). |
379 | posTrxNumber | O | A | Únicamente para integración VtolStore: Indica el número de transacción del POS |
Esta respuesta contiene todos los campos del documento “POS-VTOL” para “Sale” o “Refund”, donde se adicionan los siguientes campos por EMV/KIT.
# | Nombre | Req | Formato | Comentarios | |
6 | cardNumber | M | N16 | Número de tarjeta. Este valor es informado a la terminal pero no debe ser grabado en ningún lado para mantener las normas PCI, en caso de ser necesario el dato deberá enmascararse. El campo también se encuentra presente cuando se genera una solicitud de “additionalData”. | |
10 | posInputMode | M | A | Es el modo de ingreso de la tarjeta: • Chip = Tarjeta insertada PIN Pad • MSR Chip = Tarjeta deslizada PIN Pad • MSR ChipNR = Ingreso Manual PIN Pad • MSR ChipError = Fallback PIN Pad • Contactless = Tarjeta aproximada x Contactless • MSR Contactless = Tarjeta aproximada x Contactless (solo Amex) | |
58 | loyaltyData | O | A | Únicamente para Bancomer: Se obtiene la respuesta del campo 58 puntos Bancomer otorgada por el autorizador. El formato de esta respuesta se encuentra especificada en la documentación de Bancomer. | |
66 | track1 | M | A | Track1 de la tarjeta, es utilizado para obtener el “cardHolderName”. Este campo no existe cuando el pago fue realizado en modo manual. | |
125 | posAuthenticationMethod | O | A | Únicamente para Banamex y Bancomer: Indica cómo fue identificado el tarjeta habiente, los valores cambian dependiendo el autorizador: Para Banamex: 0 = Desconocido (default) 1 = Firma 2 = PIN 3 = Terminal no atendida 4 = Orden correo telefónico 5 = Transacción QPS (Quick Payment Service), pagaré sin firma.
Para Bancomer: 0 = Desconocido (default) 9= Transacción QPS (Quick Payment Service), pagaré sin firma. Estos valores reflejan lo indicado por el AUTORIZADOR, de este valor debe depender la impresión del Voucher. | |
161 | cardType | O | A | Tipo de tarjeta, opcional si VTOL lo responde: · Credito = Tarjeta tipo Crédito. · Debito = Tarjeta tipo Débito. · Sin Clasificar = Tipo de tarjeta no identificado por VTOL. | |
190 | comission | O | N12 | Campo Presente en caso de ser solicitada la configuración mediante el campo 218 en “cashAdvance”, deberá enviarse luego un “additionalData”. Comisión. 12 dígitos como máximo. Se envía sin separador decimal. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00 | |
201 | additionalResponseCode | M | N2 | Código de respuesta generado por VTOL, actualmente VTOL lo reporta en el campo 27. | |
202 | resetKeysOptional | O | A | Este campo indicará si el centro autorizador ha solicitado la carga de llaves opcionales. Valores: · “true” carga “opcional” solicitada. Se deberá enviar mensaje “resetKeys” de acuerdo a la estrategia informada en la especificación del pinpad. · “false” o inexistente si la carga no fue solicitada. | |
204 | cardHolderName | O | A | Se reporta en el nombre del tarjeta habiente en caso de que exista. | |
205 | aid | O | A | Card Application Identifier: Se reporta en el valor del AID en caso de existir el token B3. | |
206 | electronicSign | O | A | El valor “true” para este campo indica que se firmó electrónicamente el pago. | |
207 | withoutSign | O | A | Para Bancomer: El valor “true” para este campo indica que se leyó del pinpad que no se requiere firma del tarjeta habiente Para Banamex: El valor “true” indica que el POS solicitó la autorización mediante QPS. NOTA: Tener en cuenta la respuesta el campo 125, que es la respuesta del AUTORIZADOR. | |
209 | acceptLoyaltyPoints | O | A | Uso solo para Bancomer. El campo se encuentra presente si EMV/KIT se encuentra configurado para obtener configuración del “rsvtol.ini”. Si el valor se encuentra en “true”, indicará que el prefijo de la tarjeta tiene habilitada la opción de pagos con puntos. | |
210 | providerName | O | A | El campo se encuentra presente si EMV/KIT se encuentra configurado para obtener configuración del “rsvtol.ini”. En este campo se informa el nombre del banco configurado de la tarjeta. | |
211 | debit | O | A | El campo se encuentra presente si EMV/KIT se encuentra configurado para obtener configuración del “rsvtol.ini”. Si el valor se encuentra en “true”, indicará que la tarjeta se encuentra configurada como débito. | |
212 | paymentPlanList | O | A | El campo se encuentra presente si EMV/KIT se encuentra configurado para obtener configuración del “rsvtol.ini”. Este campo contiene una lista de todos los planes y cuotas actualmente habilitados para la tarjeta ingresada. Se utiliza el carácter “&” para separar planes de pagos y el carácter “|” para separar los atributos plan y cuotas. Ejemplo del campo con 1 solo plan de pago: “0|1” donde 0 es el plan y 1 la cantidad de cuotas. Ejemplo del campo con 2 planes de pagos: “0|1&1|12”, el primer plan de pago es plan 0 y cuotas 1; el segundo plan de pagos es plan 1 y cuotas 12. | |
213 | cashBackAllowed | O | A | El campo se encuentra presente si EMV/KIT se encuentra configurado para obtener configuración del “rsvtol.ini”. Si el valor se encuentra en “true”, indicará que la tarjeta permite transacción de CashBack. | |
214 | applicationLabel | O | A(16) | Campo a ser impreso en el pagaré del tarjeta habiente. Se toma de la información obtenida del pinpad y podrá contener todos blancos. | |
215 | preferredName | O | A(16) | Campo a ser impreso en el pagaré del tarjeta habiente. Se toma de la información obtenida del pinpad y podrá contener todos blancos. | |
216 | criptograma | O | A(16) | Se infoma el criptograma a imprimir en el comprobante. | |
217 | digitalSign | O | A (Hexadecimal) | Únicamente para Visanet/Paradox: Se devuelve como un ascii en hexadecimal la firma digital obtenida del pinpad. | |
221 | TVR | O | A | Únicamente para Banorte:
| |
222 | TSI | O | A | Únicamente para Banorte:
| |
223 | expiryDate | Únicamente para Banorte: Fecha de expiración de la tarjeta informada por el pinpad | |||
224 | Form Factor Ind | O | A | Únicamente para Banamex Valor para imprimir en el ticket para transacciones contactLess de Banamex.x| | |
225 | pinpadSerial | O | A | Únicamente Bancomer especificación 8.6: Número de serial del dispositivo pinpad conectado |
Los campos 209, 110, 211 y 212 estarán presente teniendo en cuenta los siguientes comentarios:
Para el caso de conexión PagaTodo, la aplicación identifica el Bin de la tarjeta como tarjeta PagaTodo según la configuración del archivo RSVTOL.ini, y convierte el mensaje “Sale” en un “PTService”. De este modo el POS no necesita saber si es un tipo de tarjeta compatible con el servicio, y se hacen las adaptaciones necesarias en el mensaje para que VTOL lo interprete como tal.
# | Nombre | Req | Formato | Comentarios |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “Sale”. |
12 | amount | M | N10 | Monto de la transacción, los últimos 2 dígitos son decimales. El monto podrá enviarse en “0” en caso de transacciones de CashAdvance (retiro de dinero sin pago). |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
# | Nombre | Req | Formato | Comentarios |
1 | store | AN | V10 | Identificador del sitio originador de la transacción |
2 | node | N | V10 | Identificación del nodo, en el sitio originador, donde se generó la transacción |
22 | authorizationCode | ANS | V10 | Código de autorización generado por el centro autorizador para la transacción. |
23 | authorizationMode | A | V7 | Modo de Autorización: Online = La autorización fue realizada por el Centro Autorizador. Offhost = La autorización fue realizada internamente por VTOL. Offline = La autorización fue realizada localmente por el POS. |
24 | lastTrxId | N | V15 | Id de transacción. En caso que el Campo 26 sea TrxIsPending, contendrá el trxId de la transacción pendiente. |
25 | dateTime | N | F14 | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS. |
26 | responseCode | AN | V15 | Puede contener uno de los siguientes valores: Iso8583 = la autorización fue procesada. Para evaluar si fue aprobada chequear el campo 27 Error = ver sección Código de errores del CORE TrxIsPending: indica si existen transacciones pendientes de confirmar. En este caso, el ID de transacción a confirmar está en el campo 24. |
27 | isoCode | N | V3 | Código de Respuesta generado por EMVKit. |
28 | responseMessage | ANS | V999 | Mensaje de la Respuesta ISO-8583 |
29 | serialNumber | N | V20 | Número identificatorio de la terminal en la que se procesó la transacción. |
32 | ticket | N | V4 | Número de Ticket correspondiente a la transacción. |
35 | errorDescription | ANS | V999 | Descripción de error. Sólo se encuentra presente si el valor del campo 26 es “Error”. |
68 | rrn | N | V20 | Reference referral number. |
134 | ticketMessage | ANS | V999 | Datos del ticket para impresión. |
201 | instructions | ANS | V999 | Mensaje de instrucciones |
202 | productDescription | ANS | V999 | Descripción del producto |
203 | sellerMessage | ANS | V999 | Mensaje hacia el vendedor |
1201 | additionalResponseCode | M | N2 | Código de respuesta generado por VTOL, actualmente VTOL lo reporta en el campo 27. |
Para el caso de conexión PagaTodo para consulta de promociones de tarjeta de Bienestar Capital social, la aplicación obtiene el Bin de la tarjeta para este tipo de solicitud según la configuración del archivo RSVTOL.ini, y genera la consulta a VTOL.
# | Nombre | Req | Formato | Comentarios |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “PTPromotionQuery”. |
12 | amount | M | N10 | Monto de la transacción, los últimos 2 dígitos son decimales. El monto podrá enviarse en “0” en caso de transacciones de CashAdvance (retiro de dinero sin pago). |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
# | Nombre | Req | Formato | Comentarios |
1 | store | AN | V10 | Identificador del sitio originador de la transacción |
2 | node | N | V10 | Identificación del nodo, en el sitio originador, donde se generó la transacción |
22 | authorizationCode | ANS | V10 | Código de autorización generado por el centro autorizador para la transacción. |
23 | authorizationMode | A | V7 | Modo de Autorización: Online = La autorización fue realizada por el Centro Autorizador. Offhost = La autorización fue realizada internamente por VTOL. Offline = La autorización fue realizada localmente por el POS. |
24 | lastTrxId | N | V15 | Id de transacción. En caso que el Campo 26 sea TrxIsPending, contendrá el trxId de la transacción pendiente. |
25 | dateTime | N | F14 | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS. |
26 | responseCode | AN | V15 | Puede contener uno de los siguientes valores: Iso8583 = la autorización fue procesada. Para evaluar si fue aprobada chequear el campo 27 Error = ver sección Código de errores del CORE TrxIsPending: indica si existen transacciones pendientes de confirmar. En este caso, el ID de transacción a confirmar está en el campo 24. |
27 | isoCode | N | V3 | Código de Respuesta generado por EMVKit. |
28 | responseMessage | ANS | V999 | Mensaje de la Respuesta ISO-8583 |
29 | serialNumber | N | V20 | Número identificatorio de la terminal en la que se procesó la transacción. |
32 | ticket | N | V4 | Número de Ticket correspondiente a la transacción. |
35 | errorDescription | ANS | V999 | Descripción de error. Sólo se encuentra presente si el valor del campo 26 es “Error”. |
68 | rrn | N | V20 | Reference referral number. |
134 | ticketMessage | ANS | V999 | Datos del ticket para impresión. |
200 | serviceInfo | ANS | V999 | Información adicional asociada al servicio Ver Anexo A del documento “VTOL-Manual_mensajeria_POS-VTOL_PagaTodo.docx” |
201 | instructions | ANS | V999 | Mensaje de instrucciones |
202 | productDescription | ANS | V999 | Descripción del producto |
203 | sellerMessage | ANS | V999 | Mensaje hacia el vendedor |
1201 | additionalResponseCode | M | N2 | Código de respuesta generado por VTOL, actualmente VTOL lo reporta en el campo 27. |
Luego de haber enviado un “Sale” o “Refund” es posible que EMV/KIT indique que faltan datos para continuar con el pago. En estos casos la respuesta generará un mensaje de error indicando cual es el caso, las opciones son:
1. No se ha informado el plan y cuotas a utilizar para el pago, EMV/KIT en su respuesta envía el número de cuenta/tarjeta, para que el POS pueda procesar los planes disponibles y reportarlos a EMV/KIT.
Para este caso en el “AdditionalData” se debe enviar los campos “payments” y “plan”.
2. La autorización con VTOL fue rechazada solicitando autorización telefónica, es necesario obtener la autorización de manera telefónica y enviar a EMV/KIT.
Para este caso en el “AdditionalData” se debe enviar el campo “authorizationCode”.
3. Pueden existir casos donde durante la autorización, VTOL reporte “trxIsPending”, como los ID de VTOL no son persistentes en EMV/KIT, será necesario que el POS envíe este mensaje cargando los campos “19” y “24”.
4. Existe un caso donde se ha solicitado “AdditionalData”, pero el Pos desea cancelar el pago, existe una marca en este mensaje para indicar que se desea cancelar el pago, así EMV/KIT realiza las sincronización correspondiente con el pinpad. En este caso este mensaje no generará respuesta al POS (similar al “UnSyncCompletion”).
5. En caso de implementación Bancomer, existen cuentas las cuales pueden ser pagadas con puntos Bancomer, en los casos donde se genere un código de respuesta 15 a un mensaje “Sale”, se deberá solicitar si se desea o no pagar con puntos Bancomer.
Para este caso en el “AdditionalData” se debe enviar con el campo “pointsPayment” en “true” o “false” según la elección del cliente.
6. En caso de implementación Bancomer, existen cuentas las cuales permiten el retiro de efectivo CashBack, en los casos donde se genere un código de respuesta 16 a un mensaje “Sale” se deberá solicitar si se desea o no pagar con cashBack y se deberá obtener el monto a aplicar. Este monto será enviado en el campo “additionalAmount” del additionalData.
Nota: tener en cuenta que si en un mismo pago se deben enviar varios “additionalData”, cada mensaje se debe enviar con los mismos campos enviados anteriormente. Por ejemplo, si se solicita ingreso de plan/cuotas y luego el ingreso de un código de autorización telefónica, el último mensaje (autorización telefónica) deberá contener los datos del mensaje anterior (plan/cuotas).
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “AdditionalData”. |
14 | payments | C | N2 | Cantidad de cuotas/parcialidades (meses). 2 dígitos como máximo. |
15 | plan | C | A | Plan. 1 carácter de longitud. |
19 | lastTrxAction | C | A | Acción a realizar sobre la Transacción: • Commit = Confirma la transacción • Rollback = Reversa la transacción Solo se debe enviar en caso de haber recibido un error de TrxIsPending mediante el código de error “14”. El tercer mensaje embebido debe encontrarse solo en “Sale” o “Refund”. |
22 | authorizationCode | C | A6 | Código de autorización telefónica. Este campo se encuentra presente únicamente si la transacción se autorizó offline por teléfono. |
23 | authorizationMode | O | A | Modo de Autorización: • Online = La autorización debe ser realizada por el Centro Autorizador. • Offhost = La autorización fue realizada internamente por VTOL. • Offline = La autorización fue realizada localmente por el POS. Es obligatorio el envío del campo 22 para estos casos. |
24 | lastTrxId | C | N10 | Id de transacción a confirmar / reversar. Solo se debe enviar en caso de haber recibido un error de TrxIsPending mediante el código de error “14”. El tercer mensaje embebido debe encontrarse solo en “Sale” o “Refund”. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. Debe ser exactamente el mismo valor enviado en el “Sale” o “Refund”. |
65 | additionalAmount | O | N10 | Se indica el monto a aplicar a cashBack, valores posibles: “0” = indica que no se desea retirar cashBack “YYYY” = Donde YYYY es el monto a retirar en cashback |
125 | posAuthenticationMethod | O | A | Su uso y valores se encuentran especificado en el “request” de un mensaje “Sale”. |
203 | cancelPayment | O | A | Se indica si el pago actual debe ser cancelado. Sus valores son: · “true” para indicar que se desea la anulación del pago actual. · “false” o inexistente, indica que no se está cancelando el pago, por lo tanto se procesarán los demás parámetros plan / payments / authorizationCode / idTrx y se continúe con el pago. Cuando este campo se encuentre en “true” este comando no generará respuesta alguna. |
208 | pointsPayment | O | A | Únicamente para Bancomer: Se indica si el pago actual se desea pagar o no con puntos. Sus valores: “true” = Se desea pagar con puntos “false” = No se desea pagar con puntos |
218 | configurationRequest | O | A | En el mensaje “additionalData” este campo se envía en “false” cuando el código de respuesta fue “03”, ver mensaje “cashAdvance” para más información de su uso. |
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
26 | responseCode | M | AN7 | Puede contener uno de los siguientes valores: Iso8583 = la autorización fue procesada. Para evaluar si fue aprobada chequear el campo 27 Error = si existe alguna falla en la estructura del mensaje de requerimiento que hace que EMV/KIT no lo pueda interpretar. |
27 | isoCode | M | N2 | Código de respuesta generado. 2 caracteres máximo. Ver códigos de respuesta. |
28 | responseMessage | M | A100 | Descripción del código de Respuesta. |
201 | additionalResponseCode | M | N2 | Código de respuesta generado por VTOL, actualmente VTOL lo reporta en el campo 27. |
Este mensaje es utilizado para indicarle a EMV/KIT que es momento de realizar la carga de llaves “opcional” solicitada por el centro autorizador en la autorización de un pago anteriormente realizado.
# | Nombre | Req | Formato | Comentarios |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “resetKeys”. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
# | Nombre | Req | Formato | Comentarios |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
26 | responseCode | M | AN7 | Puede contener uno de los siguientes valores: Iso8583 = la autorización fue procesada. Para evaluar si fue aprobada chequear el campo 27 Error = si existe alguna falla en la estructura del mensaje de requerimiento que hace que EMV/KIT no lo pueda interpretar. |
27 | isoCode | M | N2 | Código de respuesta generado. 2 caracteres máximo. Ver códigos de respuesta. |
28 | responseMessage | M | A100 | Descripción del código de Respuesta. |
201 | additionalResponseCode | M | N2 | Código de respuesta generado por VTOL, actualmente VTOL lo reporta en el campo 27. |
En todos los mensajes de requerimiento existe el parámetro #3 (Server), el cual se envía con el valor “VD”, esto indica que se desea que sea procesado por EMVKit. En caso de que este atributo sea “VTOL”, este no será tenido en cuenta por EMVKit y será enviado directamente a Vtol para su procesamiento.
Nota: Tener en cuenta que este mensaje debe estar alineado con la especificación propia de VTOL.
3 | server | M | A4 | Valor fijo: VTOL. |
Este tipo de mensaje puede ser usado para envío de:
Los cuales no son procesados por EMVKit.
La funcionalidad de CashAdvance es utilizada para realizar un retiro de efectivo, directamente desde el punto de venta, sin estar realizando un pago en ese momento.
Nota: Dependerá del centro autorizador si esta funcionalidad se encontrase o no habilitada.
Existen dos maneras para realizar este tipo de operaciones y depende directamente de quien es el responsable de realizar la lectura de la cuenta:
La diferencia más importante entre estos dos tipos de mensajería, es que lo errores informados durante la operación podrían traducirse en mensajes “additionalData” de solicitud de información adicional (revisar punto “8 Códigos de errores”).
Dependiendo de las dos opciones mencionadas anteriormente, se deberá revisar la documentación relacionada para el armado de la mensajería. En ambos casos, se ha agregado funcionalidad adicional que se detalla a continuación y puede ser usada en cualquier tipo de comunicación.
# | Nombre | Req | Formato | Comentarios |
3 | server | M | A4 | Valor fijo: VD. |
218 | configurationRequest | O | A | Este campo es de tipo “boolean”, por lo tanto acepta valores de tipo “true” o “false”, la inexistencia de este campo se asume valor “false”. El objetivo de este campo es informar que se desea conocer la configuración de la cuenta y por lo tanto no se enviará mensaje a VTOL. Esto es utilizado para conocer la comisión a cobrar antes de realizar el cobro al cliente. En caso de encontrarse en “true”, revisar el código de respuesta “03”. |
Dependiendo de las dos opciones mencionadas anteriormente, la respuesta deberá ser obtenida de la documentación pertinente.
# | Nombre | Req | Formato | Comentarios |
190 | comission | O | N12 | Campo Presente en caso de ser solicitada la configuración mediante el campo 218. Comisión. 12 dígitos como máximo. Se envía sin separador decimal. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00 |
Este mensaje es utilizado para corresponsalías, el mensaje se debe armar exactamente de la misma manera que se encuentra especificado en la documentación “Tech- Ref POS-VTOL Corresponsalías Bancomer”.
Nota: Dependerá del centro autorizador si esta funcionalidad se encontrase o no habilitada.
Se deberá revisar la documentación relacionada para el armado de la mensajería.
Se ha agregado funcionalidad adicional que se detalla a continuación para este tipo de mensaje.
# | Nombre | Req | Formato | Comentarios |
3 | server | M | A4 | Valor fijo: VD. |
218 | configurationRequest | O | A | Este campo es de tipo “boolean”, por lo tanto acepta valores de tipo “true” o “false”, la inexistencia de este campo se asume valor “false”. El objetivo de este campo es informar que se desea conocer la configuración de la cuenta y por lo tanto no se enviará mensaje a VTOL. Esto es utilizado para conocer la comisión a cobrar antes de realizar el cobro al cliente. En caso de encontrarse en “true”, revisar el código de respuesta “03”. |
La respuesta deberá ser obtenida de la documentación pertinente.
# | Nombre | Req | Formato | Comentarios |
190 | comission | O | N12 | Campo Presente en caso de ser solicitada la configuración mediante el campo 218. Comisión. 12 dígitos como máximo. Se envía sin separador decimal. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00 |
Comando utilizado para lectura de una tarjeta mediante el pinpad, una vez leída se retorna el número y se cierra la comunicación.
La diferencia entre ambos comandos está dada por el campo 6 de la respuesta “cardNumber”:
Ver documento ”F13 Documento de configuración - EMVKit v{version}.docx” para más información.
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre ”queryPan” o ”queryBin”. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
6 | cardNumber | M | N16 | Número de tarjeta obtenido, enmascarado o no o solo el bin, dependiendo del “trxType”. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
27 | isoCode | M | N2 | Código de respuesta generado. 2 caracteres máximo. Ver códigos de respuesta. |
28 | responseMessage | M | A100 | Descripción del código de Respuesta. |
Comando utilizado para lectura de una tarjeta mediante el pinpad, una vez leída se retorna el número y se cierra la comunicación.
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “loadExceptionBins”. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
27 | isoCode | M | N2 | Código de respuesta generado. 2 caracteres máximo. Ver códigos de respuesta. |
28 | responseMessage | M | A100 | Descripción del código de Respuesta. |
Comando utilizado para consulta de puntos con el autorizador, actualmente para puntos Bancomer. Se realiza una lectura de una tarjeta mediante el pinpad, una vez leída se realiza la consulta correspondiente con VTOL y se devuelve el resultado.
Esta operación no genera id de transacción y por lo tanto no requiere tercer mensaje (commit/rollback)
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
3 | server | M | A4 | Valor fijo: VD. |
11 | trxType | M | A22 | Identifica el tipo de transacción, en este caso será siempre “PointsLookup”. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
La respuesta contiene todos los campos respondidos por VTOL.
# | Nombre | Req | Formato | Comentarios |
0 | company | O | A10 | Identificación de compañía. |
1 | store | M | N10 | Identificación de local. |
2 | node | M | N10 | Identificación de caja. |
6 | cardNumber | M | N16 | Número de tarjeta obtenido. |
25 | dateTime | M | yyyyMMddHHmmss | Fecha y hora de la transacción, de POS. |
27 | isoCode | M | N2 | Código de respuesta generado. 2 caracteres máximo. Ver códigos de respuesta. |
28 | responseMessage | M | A100 | Descripción del código de Respuesta. |
58 | loyaltyData | O | A | Únicamente para Bancomer: Se obtiene la respuesta del campo 58 puntos Bancomer otorgada por el autorizador. El formato de esta respuesta se encuentra especificada en la documentación de Bancomer. |
A continuación, enumeramos los códigos de error que son necesarios interpretar o conocer para el POS, los códigos enumerados a continuación hacen referencia al campo 27 “responseCode” en EMVKit.
Existen varias acciones diferentes a realizar con cada respuesta de EMVKit, a continuación las explicamos:
Ej.:{28:Transacción en curso;27:99;26:11;201:10032;25:20161130170344;2:5;1:17}
Código | Descripción | Acción |
00 | La petición fue procesada correctamente. | Se ha realizado el pago correctamente, una vez terminada la transacción es necesario el envío del comando UnSyncCompletion e impresión de voucher con la información proporcionada en esta respuesta. |
01 | Mensaje de aviso. Este mensaje se encontrará deshabilitado en una primer etapa ya que actualmente la librería de comunicación no contempla múltiples respuestas. | De este mensaje se puede obtener el código de mensaje y descripción actual del estado de VtolStore. Muy útil en los casos que se desee indicar mensajes como “inserte tarjeta”, “autorizando”, “confirmando transacción”, etc. El código descriptivo puede tomarse del campo 201. |
02 | Error en el mensaje | Revisar la documentación ya que el mensaje se encuentra incorrectamente armado. |
03 | Cuando el campo “218” se encuentre presente en “true” y la configuración de la cuenta se haya podido obtener. | En caso de mensaje “Sale” para funcionalidad “cashAdvance” (cuenta leída desde el pinpad) se deberá manejar como mensaje “additionalData”. En caso de mensajes “CashAdvance” o “cardPayment”, se deberá volver a enviar el mensaje original completo (no se debe enviar additionalData para estos mensajes). En ambos casos se debe reportar 218 en “false” para autorizar. |
11 | Se ejecuta “Sale” o “Refund” y VTOL ha generado un error. | Obtener del campo 201 el “código de repuesta” de VTOL, revisar documento “VTOLCR-DB-Manual mensajeria POS - VTOL”. |
12 | Se ejecuta “Sale” o “Refund” y es necesario enviar plan/cuotas. | Ejecutar “AdditionalData”, con valores plan/cuotas. |
13 | Se ejecuta “Sale” o “Refund” y es necesario autorizar telefónicamente la transacción. | Ejecutar “AdditionalData”, con valor authorizationCode. |
14 | Se ejecuta “Sale” o “Refund” y Vtol indica TrxIsPending sobre el ID informado en el campo 24. | Ejecutar “AdditionalData”, con valores lastTrxId y lastTrxAction. |
15 | Se ejecuta “Sale” o “Refund” y se identifica que el bin ingresado necesita conocer si se desea pagar o no con puntos Bancomer. | Ejecutar “AdditionalData”, con el valor “pointsPayment”. |
16 | Se ejecuta “Sale” o “Refund” y se identifica que el bin ingresado necesita conocer si se desea retirar cashBack. | Ejecutar “AdditionalData”, con el valor “additionalAmount”. |
31 | Cuando el campo “218” se encuentre presente en “true” y la configuración de la cuenta no haya podido obtenerse. | Mensaje de error. |
99 | Error genérico | Revisar mensaje de error campo 28 y 201. |