VTOL CD AR - Manual de mensajería POS - VTOL AR
VTOL CRÉDITO DÉBITO ARGENTINA
Mensajería POS - VTOL
...
Painel | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Índice
Índice
...
|
Painel | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Âncora _Toc485222713 _Toc485222713
1. Campos de los mensajes
_Toc485222713 | |
_Toc485222713 |
Âncora _Toc201665538 _Toc201665538
Âncora _Toc485222714 _Toc485222714
Âncora _Toc145327442 _Toc145327442
1.1 Conexión con VTOL Server
_Toc201665538 | |
_Toc201665538 |
_Toc485222714 | |
_Toc485222714 |
_Toc145327442 | |
_Toc145327442 |
...
Âncora_Toc485222716 _Toc485222716
1.2 Protocolo de comunicación POS – VTOL Server
_Toc485222716 | |
_Toc485222716 |
Synthesis Napse establece un protocolo de comunicación para la interacción POS - VTOL, el cual se denomina "Protocolo VTOL". Dicho protocolo se basa en un esquema recursivo compuesto por campos y separadores. A continuación se provee una especificación detallada de su estructura junto con los consecuentes diagramas para un mejor entendimiento.
Para implementar esta mensajería, VTOL provee una librería en el cual se encuentra la declaración de funciones y las definiciones de constantes y tipos necesarias. La librería es en realidad un módulo cliente que se comunica vía TCP/IP con el servidor de transacciones VTOL. El cliente podrá implementar esta mensajería sin utilizar la librería, pero deberá respetar el formato de la misma.
El formato del protocolo VTOL se basa en la siguiente estructura:
...
Requerimiento | ||||
---|---|---|---|---|
# | FieldId | Tipo | Obligatorio | Descripción |
0 | company | Numérico | SI | Identificador de la compañía donde se generó la transacción |
1 | store | Alfanumérico | SI | Identificador del sitio originador de la transacción |
2 | node | Numérico | SI | Identificación del nodo, en el sitio originador, donde se generó la transacción. |
3 | server | Alfanumérico | Compatibilidad atrás. | Identificador del Server que procesará la transacción. ('VTOL') |
4 | messageType | Alfanumérico | Compatibilidad atrás. | Tipo de Mensaje:
|
6 | cardNumber | Numérico | Obligatorio si es Manual | Número de tarjeta. Sólo presente si el modo de ingreso fue Manual. |
7 | expiration | Numérico | Obligatorio si es Manual | Formato YYYYMM Fecha de vencimiento de la tarjeta. Sólo presente si el modo de ingreso fue Manual. |
8 | Cvc | Numérico | Obligatorio si es Manual. Además es opcional según la tarjeta. | Código de seguridad de la tarjeta. Sólo presente si el modo de ingreso fue Manual. |
9 | track2 | Alfanumérico | Obligatorio si es MSR | Track2 de la tarjeta entero (se envía todo el contenido del track2 en este campo) Este campo sólo está presente si la banda magnética / chip de la tarjeta pudo ser leído. |
10 | posInputMode | Alfanumérico | Obligatorio | Modo de Ingreso:
|
11 | trxType | Alfanumérico | Obligatorio | Tipo de Transacción:
|
12 | amount | Importe | Obligatorio | Monto de la transacción. 12 dígitos como máximo. Se envía sin coma. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00 Nota: Para ventas con propina, en este campo se envía el importe total de la compra (consumo + propina) sin especificar el valor de la propina, y la propina se envía en el campo 421 "tipAmount". |
13 | currencyPosCode | Alfanumérico | Obligatorio | Tipos de Moneda:
|
14 | payments | Numérico | Obligatorio | Cantidad de cuotas. 2 dígitos como máximo. |
15 | plan | Alfanumérico | Obligatorio | Plan. 1 caracter de longitud. |
17 | originalTrxTicketNr | Numérico | Opcional | Este campo es Opcional. Si viaja se debe precisar el número de ticket de la venta original para poder distinguir la transacción a anular. Se trata del número de ticket de la transacción original. 4 dígitos como máximo. |
18 | referedSale | Numérico | Condicional a tarjeta AMEX | Se usa para indicar si una venta se hizo de forma referida. SOLO para AMEX. Se debe encender este campo con el valor 1. |
22 | authorizationCode | Alfanumérico | Condicional si fue realizada la autorización telefónica o la pre-autorización. | Código de autorización telefónica o retornado en la Pre-autorización. 6 dígitos como máximo. Este campo se encuentra presente si la transacción se autorizó off-line por teléfono o en una Pre-autorización. |
23 | authorizationMode | Alfanumérico | Opcional, default = Online | Modo de Autorización:
|
25 | dateTime | Numérico | Obligatorio | Fecha de generación de la trx en el POS. Formato YYYYMMDDHHmmss |
53 | paymentCondition | Alfanumérico | Opcional | Condición de pago. Sólo se encuentra presente si existe una condición de pago vinculada con la transacción. |
54 | additionalAmount | Alfanumérico | Opcional CASH BACK | Contiene el Importe del "Cash Back". Se usa en transacciones del tipo CashBack o Sale + CashBack. Debe contener 12 dígitos como máximo |
56 | pinblock | Alfanumérico | Condicional a PINPAD | PIN encriptado. Se emplea para tarjetas que tienen PIN. Ejemplo pinblock: D76484D688FE1826 |
57 | accountType | Alfanumérico | Condicional a tarjeta de débito | Campo que se emplea para identificar el tipo de cuenta (ej: cta cte en pesos) Se usa para tarjetas de débito. Los valores posibles son:
|
66 | track1 | Alfanumérico | Opcional a su lectura | Track1 de la tarjeta entero (se envía todo el contenido del track1 en este campo) Este campo sólo está presente si la banda magnética / chip de la tarjeta pudo ser leído. |
70 | effectiveDate | Alfanumérico | Opcional AMEX | Fecha efectiva. Se usa para AMEX con formato yyMM |
71 | checkPendingString | Alfanumérico | Opcional, default = true | Indica si VTOL debe o no efectuar el chequeo de pendientes (se emplea para pagos parciales de tarjetas):
|
72 | creditCardCondition | Alfanumérico | Opcional | Es una cadena de 3 de largo donde se indica una condición de la tarjeta. Se usa para las tarjetas regionales o propias donde los prefijos se superponen. Este valor es identificable en el TrackI de la tarjeta y si es manual se le pregunta al cajero. |
73 | interestAmount | Alfanumérico | Opcional | Este campo es por si se necesita enviar el monto de los intereses en el mensaje a Autorizar. Normalmente el monto que llega del POS ya contiene los intereses en el caso de pagar en cuotas. Existe algún caso de alguna tarjeta especial donde el monto hay que enviarlo libre de intereses y justamente el monto de los intereses viaja en este campo. |
74 | requestAccountNumber | Alfanumérico | Opcional, default = 0 | Indica si puede recibir el número de cuenta (Visa y Posnet). Valores posible:
|
101 | differDate | Alfanumérico | Opcional | Fecha diferida. Solo utilizada para AMEX. |
102 | chipTokens | Alfanumérico | Obligatorio para modo de ingreso Chip | Visa: Criptograma tarjetas EMV |
103 | emvEncryptedType | Alfanumérico | Opcional | Tipo de encriptación utilizada entre Pinpad y Host Autorizador.
|
104 | emvEncryptedData | Alfanumérico | Opcional | Paquete encriptado devuelto por el pinpad y que se enviará al Host Autorizador. |
105 | cardSequenceNumber | Numérico | Opcional | Numero de secuencia del PAN |
106 | pinpadLogSerialNumber | Alfanumérico | Opcional | Número de serie lógico del pinpad |
107 | pinpadFisSerialNumber | Alfanumérico | Opcional | Número de serie Físico del pinpad |
108 | useEncryptedData | Alfanumérico | Opcional | Indica si se utiliza encriptación entre Pinpad y Host Autorizador (Visa, Posnet, etc).
|
118 | terminalCapability | Alfanumérico | Opcional | Capacidad de captura. Valores 1 = Manual / 2 = Lectura de Banda / 5 = Lectura de Chip |
130 | posPeriod | Numérico | Opcional | Periodo enviado por el POS. Longitud 5 |
131 | turn | Numérico | Opcional | Turno. Longitud 2 |
132 | operatorCode | Alfanumérico | Opcional | Código de operador. Longitud 20 |
133 | operatorName | Alfanumérico | Opcional | Nombre de operador. Longitud 50 |
134 | sellerCode | Alfanumérico | Opcional | Código del vendedor. Longitud 20 |
135 | sellerName | Alfanumérico | Opcional | Nombre del vendedor. Longitud 50 |
136 | attentionMode | Alfanumérico | Opcional | Modalidad de atención (AU ó AS). Longitud 2 |
137 | serviceCode | Numérico | Opcional | Código de Servicio, se envía cuando el mensaje esta encriptado (campo 108=true) y no se tiene acceso al Track2. Longitud 3. |
147 | providerPosCode | Alfanumérico | Opcional | Código del Provider. Se utiliza en los casos donde VTOL Server no puede obtener unívocamente el Proveedor utilizando los prefijos (debido enmascaramiento de la tarjeta). Ejemplo VI (Visa). Longitud 20. |
164 | posEncryptedFields | Numérico | Opcional | Indica si se utiliza encripción entre Pinpad y VTOL (modo RSA). En este caso los datos sensibles se envían encriptados. Si está activo, los campos a enviar encriptados son: 6, 8, 9, 66
|
168 | pinpadApplicationVersion | Alfanumérico | Opcional | Versión de la aplicación del software del PinPad |
201 | additionalMessageData | Alfanumérico | Opcional | Este campo tiene como finalidad que el POS, o cliente VTOL, pueda enviar un dato X y que el mismo esté presente en la respuesta. Cada módulo según implementación puede decidir qué hacer con dicho dato (Ejem Persistir en BBDD) |
261 | cipherSuite | Numérico | Opcional | Indica el largo de la llave RSA para encriptar y desencriptar datos sensibles. En VTOL Admin debe estar habilitada la propiedad de datos sensibles.
|
263 | vtolToken | Alfanumérico | Opcional | Cuando se efectúa una transacción Sale, VoidSale, Refund o VoidRefund tokenizada, se puede enviar el Token VTOL |
264 | posChannelOrigin | Numérico | Opcional | Indica el canal de origen de la transacción. Es un código con los siguientes valores posibles:
Si no se envía este campo, se toma por defecto el valor 0. |
265 | customerId | Alfanumérico | Opcional | Nombre o id de usuario que realizó la transacción |
266 | cardHolderName | Alfanumérico | Opcional | Nombre del tarjetahabiente |
270 | posTicket | Alfanumérico | Opcional | Información del ticket en formato xml y posteriormente transformado en Base 64. Ver sección Estructura del campo posTicket |
403 | afApplicationCondition | Alfanumérico | Opcional | Condición de aplicación antifraude. Este dato será utilizado por el módulo antifraude de VTOL para ejecutar o ignorar validaciones de fraude. Longitud máxima: 50 caracteres. Se puede enviar en transacciones de:
Si el POS envía una Condición en este campo, se validará si la compañía está suscripta a alguna regla con dicha Condición. Si está suscripta, se ejecutará la regla AF, pero si no está suscripta, no se ejecutará. Si el POS envía este campo vacío, o no lo envía, se validará si la compañía está suscripta a alguna regla "Sin condición". Si está suscripta, se ejecutará la regla que no tiene condición, y si no está suscripta, no se ejecutará. Si el POS envía una Condición, pero no está creada en antifraude de VTOL, no se ejecutará ninguna regla AF. |
421 | tipAmount | Importe | Opcional | Monto de propina. Se envía sin coma. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00 |
1.4.1.1.1 Estructura del campo posTicket Âncora posticket posticket
...
# | FieldId | Tipo | Descripción |
0 | company | Numérico | Identificador de la compañía donde se generó la transacción. |
1 | store | Alfanumérico | Identificador del sitio originador de la transacción |
2 | node | Numérico | Identificación del nodo, en el sitio originador, donde se generó la transacción |
3 | server | Alfanumérico | Identificador del Server que procesará la transacción. (‘VTOL’) |
4 | messageType | Alfanumérico | Tipo de Mensaje:
|
11 | trxType | Alfanumérico | Tipo de Transacción:
|
19 | lastTrxAction | Alfanumérico | Acción a realizar sobre la Transacción:
|
24 | lastTrxId | Numérico | Id de transacción a confirmar / reversar. |
25 | dateTime | Numérico | Fecha de generación de la trx en el POS. Formato YYYYMMDDHHmmss |
200 | EMV extra data | Alfanumérico | Datos extras que se deben enviar en el tercer mensaje cuanto cuando el EMV Advice es requerido.
Es necesario enviar los campos: adviceChipTokens, pinpadResponseCode y pinpadAutCode. Formato del campo: [adviceChipTokens|valor,pinpadResponseCode|valor, pinpadAutCode|valor] Ver detalle en: EMV Extra Data |
1.4.12.2 Respuesta
El tercer mensaje no tiene respuesta, salvo que esté prendido el flag de chequeo de transacciones pendientes.
...
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
---|---|---|---|---|---|---|
0 | company | Numérico | X | X | X | Identificador de la compañía donde se generó la transacción |
1 | store | Alfanumérico | X | X | X | Identificador del sitio originador de la transacción |
2 | node | Numérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción |
6 | cardNumber | Alfanumérico | O | - | O | Tarjeta enmascarada seleccionada al momento de efectuar el pago QR. El campo es opcional en caso de que se haya abonado con saldo de la cuenta de Mercado Pago. Para Rappi este campo no retorna. |
12 | amount | Importe | X | - | X | Monto de la transacción. Valor entero. Los últimos 2 dígitos corresponden a los decimales. |
13 | currencyPosCode | Alfanumérico | O | - | X | Tipos de moneda:
|
14 | payments | Numérico | - | - | O | Cantidad de cuotas seleccionadas al momento de realizar el pago QR. El campo es opcional en caso de que se haya abonado con saldo de la cuenta de Mercado Pago |
22 | authorizationCode | Alfanumérico | O | - | O | Código de autorización informado por el Autorizador. Para Mercado Pago sólo retorna cuando el cliente paga con tarjeta de crédito o débito. Para Yacaré este campo no retorna. |
24 | trxId | Numérico | X | X | X | Identificador de la transacción |
25 | dateTime | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS. El valor en este campo debe ser el mismo que el valor de la fecha y hora del requerimiento. El POS utiliza este dato para validar que se trate de la misma transacción |
26 | responseCode | Alfanumérico | X | X | X | Puede contener uno de los siguientes valores:
|
27 | isoCode | Numérico | X | X | X | Código de Respuesta emitido por el centro autorizador. 3 dígitos como máximo. Ver sección Códigos de Respuesta de VTOL Server para Billeteras Electrónicas |
28 | responseMessage | Alfanumérico | X | X | X | Mensaje de la Respuesta relacionado con el código del campo 27 |
54 | additionalAmount | Importe | O | O | O | Contiene el Importe del "Cashout". Para aquellas operaciones realizadas con retiro de efectivo. Valor entero. Los últimos 2 dígitos corresponden a los decimales. Sólo disponible para billetera Mercado Pago. |
140 | paymentType | Numérico | - | - | X | Tipo de pago. Valores posibles: 0: Tarjeta |
142 | providerName | Alfanumérico | - | - | O | Proveedor de la tarjeta seleccionada al momento de efectuar el pago QR. El campo es opcional en caso de que se haya abonado con saldo de la cuenta de Mercado Pago |
147 | providerPosCode | Lista | O | - | - | Lista de proveedores/tarjetas que coinciden con la tarjeta ingresada en la app de la billetera electrónica. Ejemplo: {VI, EL}. Esta lista deberá ser utilizada para seleccionar la tarjeta manualmente por el POS. |
157 | customerDoc | Numérico | O | O | O | Numero de documento del titular de la tarjeta. |
303 | customerName | Alfanumérico | O | O | O | Nombre del titular de la tarjeta. |
166 | trxReferenceNumber | Numérico | X | X | X | Identificador único de la transacción en VTOL Server. Longitud entre 19 y 20 dígitos, debido a que utiliza el día como parte de formato |
271 | walletPaymentId | Alfanumérico | X | - | X | Identificador del número de pago informado por el Autorizador. Para Rappi, en este campo retorna el barcode utilizado para el pago. |
272 | amountRefunded | Importe | - | - | X | Monto devuelto en la transacción |
273 | paymentStatus | Alfanumérico | O | - | O | Estado de la transacción de pago informado por el Autorizador. Estados posibles: 0: Aprobado |
274 | paymentStatusDetail | Alfanumérico | O | - | O | Detalle del estado de la transacción de pago informado por el Autorizador. |
275 | cardType | Numérico | - | - | O | Tipo de tarjeta seleccionada al momento de efectuar el pago QR. Es opcional en caso de que se haya abonado con saldo de la cuenta de Mercado Pago. Para Yacaré este campo no retorna. Para Rappi este campo no retorna. Valores posibles: |
415 | walletPayoutId | Alfanumérico | O | - | O | Identificador del ID de cashback informado por el Autorizador. Sólo retorna en caso de haber realizado Retiro de efectivo con la app de Mercado Pago. |
Ejemplo
Response from VTOL (SaleWallet): Response message: {1:1;2:1;166:14021905052200000204;271:2289999999999999228;22:1234567;24:121;25:20190214050518;26:ISO8583;27:00;28:APROBADA} Response from VTOL (RefundWallet): Response message: {1:1;2:1;25:20190214050543;26:ISO8583;27:509;28:Estado trx original no acepta devolucion} Response from VTOL (QueryWallet): Response message: {1:1;2:1;6:450995xxxxxx3704;140:0;12:53.0;13:$;14:1;142:visa;271:2289999999999999228;272:0.0;273:0;274:accredited;275:1;22:1234567;24:121;25:20190214050534;26:ISO8583;27:00;28:APROBADA} |
...
VTOL se integra con QR Adquiriente de Fiserv para permitir efectuar pagos en los puntos de venta con billeteras electrónicas. En el pinpad se imprime el código QR en pantalla, el cual siempre es dinámico, es decir que se genera uno nuevo por cada transacción.
...
Aviso | ||
---|---|---|
| ||
En caso de ser un pago con Tarjeta de Débito, el POS deberá enviar en el mensaje SaleWallet el campo payments (14) con valor = 1. En caso de ser un pago con Tarjeta de Crédito, el POS deberá enviar en el mensaje SaleWallet el campo payments (14) con valor mayor a 0. En caso de ser un pago con Dinero en cuenta, el POS deberá enviar en el mensaje SaleWallet el campo payments (14) con valor = 0, o directamente no enviar el campo 14. Operatoria de pago con Tarjetas: El Punto de Venta informará en el mensaje de SaleWallet el Monto y las Cuotas de la operación. VTOL responderá al POS el dato de la tarjeta seleccionada por el cliente en su Billetera Virtual, y el POS con esa información podrá modificar o no el monto original y las cuotas originales. Esto es para que el POS pueda aplicar algún beneficio, por ejemplo 12 cuotas sin interés, o para aplicar intereses, por ejemplo 12 con interés, con el cual el monto puede afectarse. Por lo tanto, el POS enviará en el mensaje de QueryWallet el monto y las cuotas, pudiendo modificar ambos datos. El flujo es el siguiente:
|
1.4.26.1 Requerimiento
Informações | ||
---|---|---|
| ||
X = Obligatorio |
...
Número | Nombre del campo | Tipo de dato | SaleWallet | QueryWallet | Descripción | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | company | Numérico | X | X | Identificador de la compañía donde se generó la transacción. | ||||||
1 | store | Alfanumérico | X | X | Identificador del sitio originador de la transacción | ||||||
2 | node | Numérico | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción | ||||||
3 | server | Alfanumérico | X | X | Identificador del Server que procesará la transacción. (en el caso de VTOL será 'VTOL') | ||||||
4 | messageType | Alfanumérico | X | X | Tipo de Mensaje:
| ||||||
11 | trxType | Alfanumérico | X | X | Tipo de Transacción:
| ||||||
12 | amount | Numérico | X | - | Monto de la transacción. 12 dígitos como máximo. Valor entero. Los dos últimos dígitos representan los decimales. Ej: "1000" equivale a "10.00". | ||||||
13 | currencyPosCode | Alfanumérico | X | - | Tipos de moneda:
| ||||||
16 | originalDate | Numérico | - | X | Fecha de realización de la compra con billetera electrónica en formato YYYYMMDD | ||||||
24 | lastTrxId | Numérico | O | O | Utilizado cuando está activo el control transaccional. En este campo el POS debe enviar la última transacción procesada correctamente. | ||||||
25 | dateTime | Numérico | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS | ||||||
268 | walletPosTrxId | Alfanumérico | X | O | Identificador único de la transacción de billetera para la compañía. Es originado por el POS para realizar una compra con billetera. Formato: Opcional en QueryWallet: Se informa este campo o el campo walletPaymentId para localizar una transacción de compra. | ||||||
269 | walletType | Numérico | X | X | Tipo de billetera por la cual se cursará la transacción en el POS. Opciones: 7: QR Adquiriente Fiserv | ||||||
270 | posTicket | Alfanumérico | X | - | Información del ticket en formato xml y posteriormente transformado en Base 64. Ver sección Estructura del campo posTicket | ||||||
271 | walletPaymentId | Alfanumérico | - | O | Identificador del número de pago informado por el Autorizador en el campo 271 de la respuesta de la operación SaleWallet. Opcional en QueryWallet: Se informa este campo o el campo walletPosTrxId para localizar una transacción de compra. | 401||||||
410 | paymentMethodsDataQRCode | JsonAlfanumérico | O | - | Información de los planes de pago, en formato json. Requerido únicamente cuando el pago se realiza con Tarjeta de crédito o débito. Si el POS no informa este campo, solamente se podrá pagar con Dinero en cuenta. | 410 | QRCode | Alfanumérico | O | - | El POS enviará si desea recibir el códigoEl POS enviará si desea recibir el código QR para imprimirlo en la caja. Valores posibles: True: indica que se recibirá el código QR y se inyectará en el pinpad. False: indica que se recibirá el código QR pero no se inyectará en el pinpad. No se envía el campo: indica que no se recibirá el código QR |
Estructura del campo posTicket (270)
El mensaje con la estructura del ticket estará en XML. El elemento raíz de ese mensaje XML deberá ser la etiqueta <message>, siendo la misma lo que se llamará encabezado.
Dentro del encabezado, se podrá enviar el valor de los descuentos totales y de los impuestos totales que aplicarán a la compra.
Los campos dentro del encabezado serán: totDiscount y totTaxes
Detalle de los campos:
Elemento | Tipo de dato | Descripción | Requerido | Valor ante ausencia |
---|---|---|---|---|
totDiscount | Numérico | Importe total de descuento que calcula el POS. Será la sumatoria de descuentos que se apliquen a los artículos. | No | 0 |
totTaxes | Numérico | Importe total de impuesto que calcula el POS. Será la sumatoria de impuestos que se apliquen sobre la compra. | No | 0 |
La manera de ejecutar un comando es utilizando una etiqueta con la forma <elemento-comando>. El elemento "item" identifica a los artículos. De esta manera, si se desea, por ejemplo, agregar un nuevo artículo el comando a utilizar será <item-add>. En el cuerpo del mensaje podrá contener uno, ninguno o varios de estos comandos.
...
Aviso | ||
---|---|---|
| ||
Esta estructura generada debe transformarse al formato Base 64 para informárselo a VTOL en el campo 270 posTicket. |
Estructura del campo paymentMethodsData (401)
El mensaje con la estructura de los medios de pago será en JSON. Estará conformado por los siguientes campos:
...
1.4.26.2 Respuesta
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
QueryWallet | Descripción | |||||||||||||||
0 | company | providerPosCodeNuméricoAlfanumérico | X | SiX | Código del Proveedor de la tarjeta configurado en VTOL. Por ejemplo para Visa el código es "VI". El código se obtiene de la Configuración de POS. | |||||||||||
bankCode | Numérico | No | Identificador del banco asociado a la tarjeta. Debe corresponder al ID de banco dispuesto por el BCRA. Ver códigos de bancos. | |||||||||||||
installments | Array | Si | Información de las cuotas. | |||||||||||||
paymentOptionId | Alfanumérico | Si | Identificador de la opción de pago. Máximo 10 caracteres. Debe ser único dentro del campo "paymentMethodsData". Permite trazabilidad con la opción que elija el cliente en el momento de pagar. La opción de pago seleccionada por el cliente en su billetera virtual es retornada por VTOL en el mensaje de respuesta de la venta, en el campo 404. | quantity | Numérico | Si | Cantidad de cuotas. Número entero. Máximo 2 dígitos. | paymentCondition | Alfanumérico | No | Condición de la opción de pago. Sólo se informará si existe en VTOL una opción de pago con una condición. Máximo 20 caracteres. | amountPerInstallment | Importe | Si | Monto por cuotas. Valor entero. Los 2 últimosIdentificador de la compañía donde se generó la transacción | |
1 | store | Alfanumérico | X | X | Identificador del sitio originador de la transacción | |||||||||||
2 | node | Numérico | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción. | |||||||||||
12 | amount | Importe | X | X | Contiene el importe que pagó el cliente, el cual puede variar si pagó con intereses o se aplicó algún descuento. Valor entero. Los últimos 2 dígitos corresponden a los decimales. | |||||||||||
13 | totalAmountcurrencyPosCode | ImporteAlfanumérico | Si | Monto total. Incluye los recargos. Valor entero. Los 2 últimos dígitos corresponden a los decimales. | surcharge | Numérico | Si | C.F.T. (Costo Financiero Total). Porcentaje de recargo sobre las cuotas. Valor entero. Los 2 últimos dígitos corresponden a los decimales. | nominalAnnualRate | Numérico | Si | T.N.A. (Tasa Nominal Anual). Valor entero. Los 2 últimos dígitos corresponden a los decimales. | defaultPosWalletInstallment | Boolean | No | Marca que indica dentro de la colección el método de pago seleccionado por defecto para que VTOL lo informe al Autorizador. |
Ejemplo del campo paymentMethodsData (401)
Bloco de código |
---|
[
{
"providerPosCode":"VIG",
"bankCode":"7",
"installments":[
{
"paymentOptionId":"1",
"quantity":"1",
"amountPerInstallment":150000,
"totalAmount":150000,
"surcharge":0,
"nominalAnnualRate":0,
"defaultPosWalletInstallement":true
},
{
"paymentOptionId":"2",
"quantity":"6",
"amountPerInstallment":25000,
"totalAmount":150000,
"surcharge":1100,
"nominalAnnualRate":1500
}
]
},
{
"providerPosCode":"VI",
"installments":[
{
"paymentOptionId":"3",
"quantity":"12",
"amountPerInstallment":15000,
"totalAmount":180000,
"surcharge":1256,
"nominalAnnualRate":1487
}
]
},
{
"providerPosCode":"MC",
"installments":[
{
"paymentOptionId":"4",
"quantity":"1",
"amountPerInstallment":150000,
"totalAmount":150000,
"surcharge":0,
"nominalAnnualRate":0
},
{
"paymentOptionId":"5",
"quantity":"12",
"amountPerInstallment":15000,
"totalAmount":180000,
"surcharge":1256,
"nominalAnnualRate":1487
}
]
}
] |
1.4.26.2 Respuesta
Informações | ||
---|---|---|
| ||
X = Obligatorio |
...
Número
...
Nombre del campo
...
Tipo de dato
...
SaleWallet
...
QueryWallet
...
Descripción
...
Contiene el importe que pagó el cliente, el cual puede variar si pagó con intereses o se aplicó algún descuento. Valor entero. Los últimos 2 dígitos corresponden a los decimales.
...
Tipos de moneda:
- $ = Pesos
...
Código de autorización informado por el Autorizador
...
25
...
dateTime
...
Numérico
...
Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS. El valor en este campo debe ser el mismo que el valor de la fecha y hora del requerimiento. El POS utiliza este dato para validar que se trate de la misma transacción
...
26
...
responseCode
...
Alfanumérico
...
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ódigos de error 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
...
Numérico
...
Código de Respuesta emitido por el centro autorizador. 2 dígitos como máximo. Ver sección Códigos de Respuesta de VTOL Server para Billeteras Electrónicas
...
28
...
responseMessage
...
Alfanumérico
...
Mensaje de la Respuesta relacionado con el código del campo 27
...
Tipo de pago. Valores posibles:
0: Tarjeta
1: Efectivo
2: Transferencia
...
Estado de la transacción de pago informado por el Autorizador. Estados posibles:
0: Aprobado
2: Pendiente
6: Rechazado
7: Cancelado
9: Reversado
...
Tipo de tarjeta seleccionada al momento de efectuar el pago QR. Valores posibles:
0: Débito
1: Crédito
...
Código de respuesta de la librería.
Indica cómo fue procesada la operación en EMVKIT:
Éxito = 000
Error <> 000
Ver sección Códigos de Respuesta de Librería
...
1.4.27 Operaciones PayStore
VTOL se integra con PayStore de Prisma para permitir efectuar pagos en los puntos de venta, utilizando tarjetas presentes de crédito o débito, y billeteras electrónicas.
Las operaciones soportadas son:
- SaleWallet = Permite realizar una compra presencial a través de PayStore.
- SaleWallet con cashback = Permite realizar una compra presencial y realizar retiro de efectivo.
- RefundWallet = Permite realizar una devolución (total) de una compra presencial a través de PayStore. No se permiten devoluciones parciales.
- QueryWallet = Permite realizar una consulta de una operación de compra con PayStore para conocer si la misma fue autorizada y así obtener los datos por parte del Autorizador.
Procedimiento para PayStore
El proceso de pagos con PayStore se realizará de la siguiente manera:
- Se inicia con el envío de una orden de venta (transacción SaleWallet) por parte del POS a VTOL. En el requerimiento, el POS puede incluir o no la cantidad de cuotas del pago.
- VTOL recibe la orden de venta del POS, y envía la información a PayStore con todos los datos de la venta.
- En ese momento el cajero podrá capturar los datos del pago en la terminal pinpad, el cual puede ser con tarjeta física de crédito y débito, o bien con billetera virtual, realizando la lectura del código QR que se muestra en el pinpad.
- El POS recibirá la respuesta de la transacción SaleWallet con el mensaje: "Consulte el pago".
- Para conocer el resultado de la operación, el POS deberá realizar una consulta (transacción QueryWallet). Las respuestas del QueryWallet pueden ser las siguientes:
- VTOL responde "Aprobado". Indica que el pago fue autorizado por PayStore. El paso siguiente del POS es confirmar o cancelar la transacción. Se imprime el comprobante en la terminal pinpad.
- VTOL responde "Rechazado". Indica que el cliente intentó pagar pero PayStore rechazó el pago.
- Por último, el POS deberá confirmar la operación, mediante el Tercer Mensaje, enviando Commit.
La anulación o devolución, sí precisa de interacción por parte del comprador en la caja, en la terminal pinpad se debe capturar los mismos datos de la tarjeta o billetera virtual que se utilizó para el pago. El POS envía el identificador del número de pago del Autorizador en el mensaje RefundWallet.
Aviso | ||
---|---|---|
| ||
Si una Venta está Aprobada en el pinpad, no es posible reversarla. Cuando la caja intente reversar, se crea entrada en Resolución Administrativa para que sea tratada de forma manual. |
Procedimiento para Cashout con PayStore
Se podrán realizar las siguientes operaciones:
Ventas
- Ventas de productos y retiro de efectivo
- En estos casos, se aprueban ambas cosas. No es posible obtener aprobaciones parciales.
Devoluciones
- Realizar devoluciones de los productos y del cashout.
- Operación de venta con productos y cashout. Permite devolver:
- Devolución total de los productos y del cashout.
- Operación de venta sólo con productos. Permite devolver:
- Devolución total de los productos
- Operación de venta con productos y cashout. Permite devolver:
- La devolución de cashout siempre debe ser por el monto total.
1.4.27.1 Requerimiento
Informações | ||
---|---|---|
| ||
X = Obligatorio |
...
Número
...
Nombre del campo
...
Tipo de dato
...
SaleWallet
...
RefundWallet
...
QueryWallet
...
Descripción
...
X
...
Tipo de Mensaje:
- Control = Mensaje de Control, para uso interno por parte de un módulo en su comunicación con el server.
- Data = Mensaje de la Aplicación cliente.
...
11
...
trxType
...
Alfanumérico
...
X
...
Tipo de Transacción:
- SaleWallet = Compra con billetera electrónica
...
12
...
amount
...
Importe
...
X
...
Monto de la transacción. 12 dígitos como máximo. Valor entero. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00
Para devoluciones, el importe debe ser siempre por el total de la venta y en la misma moneda informada.
...
13
...
currencyPosCode
...
Alfanumérico
...
X
...
Tipos de moneda:
- $ = Pesos
...
Cantidad de cuotas. 2 dígitos como máximo. Valor entero.
Si no se informa este campo, se toma por defecto el valor 1.
...
25
...
dateTime
...
Numérico
...
X
...
Contiene el Importe del "Cashout". 12 dígitos como máximo. Valor entero. Los últimos 2 dígitos corresponden a los decimales.
Para devoluciones, se debe enviar el monto total del cashout.
...
Identificador único de la transacción de billetera para la compañía. Es originado por el POS para realizar una compra o una devolución.
Formato:
codigoTienda (longitud 10) + codigoCaja (longitud 10) + Fecha (AAMMDDHHmmss) (longitud 12)
Longitud total de 32
Opcional en QueryWallet: Se informa este campo o el campo walletPaymentId para localizar una transacción.
...
Tipo de billetera por la cual se cursará la transacción en el POS. Opciones:
9: PayStore
...
Identificador del número de pago informado por el Autorizador en el campo 271 de la respuesta de la operación SaleWallet.
Opcional en QueryWallet: Se informa este campo o el campo walletPosTrxId para localizar una transacción.
...
Título de la venta. Longitud máxima 100.
Si el POS no lo envía, VTOL tomará un valor por defecto. El siguiente label: "Pago con Billetera virtual en" + "CompanyName".
...
Descripción de la venta. Longitud máxima 100.
Si el POS no lo envía, VTOL tomará un valor por defecto. El siguiente label: "Pago realizado por un monto de $amount.
...
Indica las copias del comprobante de pago debe imprimir el terminal. Valores posibles:
1. Solo copia comercio
2. Solo copia cliente
3. Ambas copias
Si no se envía este campo, no se imprime ninguna copia
...
Indica el medio de pago que se podrá utilizar para la operación. Valores posibles:
1. Tarjeta (pago con tarjeta física débito o crédito)
2. Código QR (pago con billeteras virtuales)
Si no se envía este campo, se toma por defecto el valor 1.
Estructura del campo posTicket
El mensaje con la estructura del ticket estará en XML. El elemento raíz de ese mensaje XML deberá ser la etiqueta <message>, siendo la misma lo que se llamará encabezado.
Dentro del encabezado, se podrá enviar el valor de los descuentos totales y de los impuestos totales que aplicarán a la compra.
Los campos dentro del encabezado serán: totDiscount y totTaxes
Detalle de los campos:
...
Elemento
...
Tipo de dato
...
Descripción
...
Requerido
...
Valor ante ausencia
...
La manera de ejecutar un comando es utilizando una etiqueta con la forma <elemento-comando>. El elemento "item" identifica a los artículos. De esta manera, si se desea, por ejemplo, agregar un nuevo artículo el comando a utilizar será <item-add>. En el cuerpo del mensaje podrá contener uno, ninguno o varios de estos comandos.
Cada uno de los comandos que se envían posee diversos atributos, los cuales identifican al elemento que se está enviando y definen diversas propiedades que poseen los mismos. Poseerá un número de secuencia, el cual identifica cada elemento unívocamente:
...
Propiedad
...
Tipo de dato
...
Descripción
...
Requerido
...
seq
...
Entero positivo
...
Número identificador único del elemento dentro de la transacción.
...
Sí
Cada comando posee una serie de atributos que definirán las distintas propiedades del elemento que se está agregando (además del número de secuencia antes mencionado).
Para el elemento ítem, los atributos serán los siguientes:
...
Elemento
...
Atributo
...
Tipo de dato
...
Descripción
...
Requerido
...
Valor ante ausencia
...
unitprice
...
Numérico positivo
...
Precio unitario del artículo en cuestión.
...
Si
...
xprice
...
Numérico positivo
...
Precio extendido del artículo en cuestión. Es igual a la cantidad por el precio unitario.
...
Si
...
qty
...
Entero positivo
...
Cantidad de artículos en la línea.
...
Si
...
magnitude
...
Numérico positivo
...
Si el artículo es mensurable por otro unidad que no sea la cantidad, deberá ser expresad en esta propiedad.
...
No
...
0
...
code
...
Alfanumérico
...
Código propio del artículo. Puede ser el sku o ean.
...
No
...
"-"
...
brand
...
Alfanumérico
...
Marca del artículo.
...
No
...
"-"
...
supplier
...
Alfanumérico
...
Proveedor al que pertenece el artículo.
...
No
...
"-"
...
discountable
...
Alfanumérico
...
Si el artículo es puede recibir descuentos o no.
...
No
...
"-"
...
level1
...
Alfanumérico
...
Nivel 1 de categorización del artículo. Anteriormente este nivel se conocía con el nombre de Departamento.
...
No
...
"-"
...
level2
...
Alfanumérico
...
Nivel 2 de categorización del artículo. Anteriormente este nivel se conocía como la Familia del artículo.
...
No
...
"-"
...
level3
...
Alfanumérico
...
Nivel 3 de categorización del artículo. Anteriormente este nivel se conocía como la Categoría del artículo.
...
No
...
"-"
...
level4
...
Alfanumérico
...
Nivel 4 de categorización del artículo. Anteriormente este nivel se conocía como la subcategoría del artículo.
...
No
...
"-"
...
Moneda utilizada en el precio del ítem.
...
Ejemplo
Bloco de código | ||
---|---|---|
| ||
<message totDiscount="100.00" totTaxes="50.00">
<item-add seq="1" code="0001" discountable="true" unitprice="100.0" qty="3.0" xprice="300.0" level1="MEN" level2="CASUAL" supplier="" brand="LEVIS" magnitude="1" description="Jean casual" currency="$" />
<item-add seq="2" code="0002" discountable="true" unitprice="28.0" qty="1.0" xprice="48.0" level1="MEN" level2="CASUAL" supplier="" brand="LEVIS" magnitude="1" description="Jean casual" currency="$" />
</message> |
Ejemplo de requerimiento:
...
SaleWallet:
{269:9;268:0000000001000000000120223603013649;25:20220303133649;71:True;14:1;13:$;12:8100;11:SaleWallet;4:DATA;270:PG1lc3NhZ2UgjYXN1YWwiIGN1cnJlbmN5PSIkIiAvPgo8L21lc3NhZ2U+Cg}
RefundWallet:
{271:03013659-d8ec-4e06-974c-e967f83e782e;16:20220303;269:9;268:0000000001000000000120223803013836;13:$;12:8100;11:RefundWallet;4:DATA;3:VTOL;2:1;25:20220303133836;71:True;1:1;0:1}
QueryWallet:
{0:1;1:1;2:1;3:VTOL;4:DATA;11:QueryWallet;16:20220303;25:20220303133921;71:False;268:0000000001000000000120223803013836;269:9}
1.4.27.2 Respuesta
...
X | X | Tipos de moneda:
| |||
14 | payments | Numérico | X | O | Cantidad de cuotas seleccionadas al momento de realizar el pago QR. |
22 | authorizationCode | Alfanumérico | - | X | Código de autorización informado por el Autorizador |
24 | trxId | Numérico | X | X | Identificador de la transacción. |
25 | dateTime | Numérico | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS. El valor en este campo debe ser el mismo que el valor de la fecha y hora del requerimiento. El POS utiliza este dato para validar que se trate de la misma transacción |
26 | responseCode | Alfanumérico | X | X | Puede contener uno de los siguientes valores:
|
27 | isoCode | Numérico | X | X | Código de Respuesta emitido por el centro autorizador. 2 dígitos como máximo. Ver sección Códigos de Respuesta de VTOL Server para Billeteras Electrónicas |
28 | responseMessage | Alfanumérico | X | X | Mensaje de la Respuesta relacionado con el código del campo 27 |
140 | paymentType | Numérico | - | X | Tipo de pago. Valores posibles: 0: Tarjeta |
166 | trxReferenceNumber | Numérico | X | - | Identificador único de la transacción en VTOL Server. Longitud entre 19 y 20 dígitos, debido a que utiliza el día como parte de formato |
271 | walletPaymentId | Alfanumérico | - | X | Identificador del número de pago informado por el Autorizador |
273 | paymentStatus | Alfanumérico | - | X | Estado de la transacción de pago informado por el Autorizador. Estados posibles: 0: Aprobado |
275 | cardType | Numérico | - | O | Tipo de tarjeta seleccionada al momento de efectuar el pago QR. Valores posibles: 0: Débito |
410 | QRCode | Alfanumérico | O | O | Se envía la cadena de texto (string del QR dinámico) que retorna desde Fiserv. Este string se utiliza para imprimir el QR en el POS. |
1010 | currentSessionId | Numérico | X | X | Identificador de la sesión |
1027 | libResponseCode | Numérico | X | X | Código de respuesta de la librería. |
1028 | libResponseMessage | Alfanumérico | X | X | Mensaje descriptivo del código de respuesta de la librería |
1.4.27 Operaciones PayStore
VTOL se integra con PayStore de Prisma para permitir efectuar pagos en los puntos de venta, utilizando tarjetas presentes de crédito o débito, y billeteras electrónicas.
Las operaciones soportadas son:
- SaleWallet = Permite realizar una compra presencial a través de PayStore.
- SaleWallet con cashback = Permite realizar una compra presencial y realizar retiro de efectivo.
- RefundWallet = Permite realizar una devolución (total) de una compra presencial a través de PayStore. No se permiten devoluciones parciales.
- QueryWallet = Permite realizar una consulta de una operación de compra con PayStore para conocer si la misma fue autorizada y así obtener los datos por parte del Autorizador.
Procedimiento para PayStore
El proceso de pagos con PayStore se realizará de la siguiente manera:
- Se inicia con el envío de una orden de venta (transacción SaleWallet) por parte del POS a VTOL. En el requerimiento, el POS puede incluir o no la cantidad de cuotas del pago.
- VTOL recibe la orden de venta del POS, y envía la información a PayStore con todos los datos de la venta.
- En ese momento el cajero podrá capturar los datos del pago en la terminal pinpad, el cual puede ser con tarjeta física de crédito y débito, o bien con billetera virtual, realizando la lectura del código QR que se muestra en el pinpad.
- El POS recibirá la respuesta de la transacción SaleWallet con el mensaje: "Consulte el pago".
- Para conocer el resultado de la operación, el POS deberá realizar una consulta (transacción QueryWallet). Las respuestas del QueryWallet pueden ser las siguientes:
- VTOL responde "Aprobado". Indica que el pago fue autorizado por PayStore. El paso siguiente del POS es confirmar o cancelar la transacción. Se imprime el comprobante en la terminal pinpad.
- VTOL responde "Rechazado". Indica que el cliente intentó pagar pero PayStore rechazó el pago.
- Por último, el POS deberá confirmar la operación, mediante el Tercer Mensaje, enviando Commit.
La anulación o devolución, sí precisa de interacción por parte del comprador en la caja, en la terminal pinpad se debe capturar los mismos datos de la tarjeta o billetera virtual que se utilizó para el pago. El POS envía el identificador del número de pago del Autorizador en el mensaje RefundWallet.
Aviso | ||
---|---|---|
| ||
Si una Venta está Aprobada en el pinpad, no es posible reversarla. Cuando la caja intente reversar, se crea entrada en Resolución Administrativa para que sea tratada de forma manual. |
Procedimiento para Cashout con PayStore
Se podrán realizar las siguientes operaciones:
Ventas
- Ventas de productos y retiro de efectivo
- En estos casos, se aprueban ambas cosas. No es posible obtener aprobaciones parciales.
Devoluciones
- Realizar devoluciones de los productos y del cashout.
- Operación de venta con productos y cashout. Permite devolver:
- Devolución total de los productos y del cashout.
- Operación de venta sólo con productos. Permite devolver:
- Devolución total de los productos
- Operación de venta con productos y cashout. Permite devolver:
- La devolución de cashout siempre debe ser por el monto total.
1.4.27.1 Requerimiento
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
---|---|---|---|---|---|---|
0 | company | Numérico | X | X | X | Identificador de la compañía donde se generó la transacción. |
1 | store | Alfanumérico | X | X | X | Identificador del sitio originador de la transacción |
2 | node | Numérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción |
3 | server | Alfanumérico | X | X | X | Identificador del Server que procesará la transacción. (en el caso de VTOL será 'VTOL') |
4 | messageType | Alfanumérico | X | X | X | Tipo de Mensaje:
|
11 | trxType | Alfanumérico | X | X | X | Tipo de Transacción:
|
12 | amount | Importe | X | X | - | Monto de la transacción. 12 dígitos como máximo. Valor entero. Los dos últimos dígitos representan los decimales. Ej: 1000 equivale a 10.00 Para devoluciones, el importe debe ser siempre por el total de la venta y en la misma moneda informada. |
13 | currencyPosCode | Alfanumérico | X | X | - | Tipos de moneda:
|
14 | payments | Numérico | O | - | - | Cantidad de cuotas. 2 dígitos como máximo. Valor entero. Si no se informa este campo, se toma por defecto el valor 1. |
16 | originalDate | Numérico | - | X | X | Fecha de realización de la compra con billetera electrónica en formato YYYYMMDD |
24 | lastTrxId | Numérico | O | O | O | Utilizado cuando está activo el control transaccional. En este campo el POS debe enviar la última transacción procesada correctamente. |
25 | dateTime | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato: YYYYMMDDHHMMSS |
54 | additionalamount | Importe | O | O | - | Contiene el Importe del "Cashout". 12 dígitos como máximo. Valor entero. Los últimos 2 dígitos corresponden a los decimales. Para devoluciones, se debe enviar el monto total del cashout. |
268 | walletPosTrxId | Alfanumérico | X | X | O | Identificador único de la transacción de billetera para la compañía. Es originado por el POS para realizar una compra o una devolución. Formato: Longitud total de 32 Opcional en QueryWallet: Se informa este campo o el campo walletPaymentId para localizar una transacción. |
269 | walletType | Numérico | X | X | X | Tipo de billetera por la cual se cursará la transacción en el POS. Opciones: 9: PayStore |
270 | posTicket | Base 64 | X | - | - | Información del ticket en formato xml y posteriormente transformado en Base 64. Ver sección Estructura del campo posTicket |
271 | walletPaymentId | Alfanumérico | - | X | O | Identificador del número de pago informado por el Autorizador en el campo 271 de la respuesta de la operación SaleWallet. Opcional en QueryWallet: Se informa este campo o el campo walletPosTrxId para localizar una transacción. |
311 | purchaseTitle | Alfanumérico | O | - | - | Título de la venta. Longitud máxima 100. Si el POS no lo envía, VTOL tomará un valor por defecto. El siguiente label: "Pago con Billetera virtual en" + "CompanyName". |
312 | purchaseDesc | Alfanumérico | O | - | - | Descripción de la venta. Longitud máxima 100. Si el POS no lo envía, VTOL tomará un valor por defecto. El siguiente label: "Pago realizado por un monto de $amount. |
413 | printCopiesVoucher | Numérico | O | O | - | Indica las copias del comprobante de pago debe imprimir el terminal. Valores posibles: 1. Solo copia comercio Si no se envía este campo, no se imprime ninguna copia |
414 | paymentOperationMethod | Numérico | O | - | - | Indica el medio de pago que se podrá utilizar para la operación. Valores posibles: 1. Tarjeta (pago con tarjeta física débito o crédito) Si no se envía este campo, se toma por defecto el valor 1. |
Estructura del campo posTicket
El mensaje con la estructura del ticket estará en XML. El elemento raíz de ese mensaje XML deberá ser la etiqueta <message>, siendo la misma lo que se llamará encabezado.
Dentro del encabezado, se podrá enviar el valor de los descuentos totales y de los impuestos totales que aplicarán a la compra.
Los campos dentro del encabezado serán: totDiscount y totTaxes
Detalle de los campos:
Elemento | Tipo de dato | Descripción | Requerido | Valor ante ausencia |
---|---|---|---|---|
totDiscount | Numérico | Importe total de descuento que calcula el POS. Será la sumatoria de descuentos que se apliquen a los artículos. | No | 0 |
totTaxes | Numérico | Importe total de impuesto que calcula el POS. Será la sumatoria de impuestos que se apliquen sobre la compra. | No | 0 |
La manera de ejecutar un comando es utilizando una etiqueta con la forma <elemento-comando>. El elemento "item" identifica a los artículos. De esta manera, si se desea, por ejemplo, agregar un nuevo artículo el comando a utilizar será <item-add>. En el cuerpo del mensaje podrá contener uno, ninguno o varios de estos comandos.
Cada uno de los comandos que se envían posee diversos atributos, los cuales identifican al elemento que se está enviando y definen diversas propiedades que poseen los mismos. Poseerá un número de secuencia, el cual identifica cada elemento unívocamente:
Propiedad | Tipo de dato | Descripción | Requerido |
---|---|---|---|
seq | Entero positivo | Número identificador único del elemento dentro de la transacción. | Sí |
Cada comando posee una serie de atributos que definirán las distintas propiedades del elemento que se está agregando (además del número de secuencia antes mencionado).
Para el elemento ítem, los atributos serán los siguientes:
Elemento | Atributo | Tipo de dato | Descripción | Requerido | Valor ante ausencia |
---|---|---|---|---|---|
Ítem | unitprice | Numérico positivo | Precio unitario del artículo en cuestión. | Si | |
xprice | Numérico positivo | Precio extendido del artículo en cuestión. Es igual a la cantidad por el precio unitario. | Si | ||
qty | Entero positivo | Cantidad de artículos en la línea. | Si | ||
magnitude | Numérico positivo | Si el artículo es mensurable por otro unidad que no sea la cantidad, deberá ser expresad en esta propiedad. | No | 0 | |
code | Alfanumérico | Código propio del artículo. Puede ser el sku o ean. | No | "-" | |
brand | Alfanumérico | Marca del artículo. | No | "-" | |
supplier | Alfanumérico | Proveedor al que pertenece el artículo. | No | "-" | |
discountable | Alfanumérico | Si el artículo es puede recibir descuentos o no. | No | "-" | |
level1 | Alfanumérico | Nivel 1 de categorización del artículo. Anteriormente este nivel se conocía con el nombre de Departamento. | No | "-" | |
level2 | Alfanumérico | Nivel 2 de categorización del artículo. Anteriormente este nivel se conocía como la Familia del artículo. | No | "-" | |
level3 | Alfanumérico | Nivel 3 de categorización del artículo. Anteriormente este nivel se conocía como la Categoría del artículo. | No | "-" | |
level4 | Alfanumérico | Nivel 4 de categorización del artículo. Anteriormente este nivel se conocía como la subcategoría del artículo. | No | "-" | |
description | Alfanumérico | Descripción del ítem | Si | ||
currency | Alfanumérico | Moneda utilizada en el precio del ítem. | Si | ||
measure | Alfanumérico | Unidad de medida del ítem. Valores posibles: unit - pack | No | "unit" |
Ejemplo
Bloco de código | ||
---|---|---|
| ||
<message totDiscount="100.00" totTaxes="50.00">
<item-add seq="1" code="0001" discountable="true" unitprice="100.0" qty="3.0" xprice="300.0" level1="MEN" level2="CASUAL" supplier="" brand="LEVIS" magnitude="1" description="Jean casual" currency="$" />
<item-add seq="2" code="0002" discountable="true" unitprice="28.0" qty="1.0" xprice="48.0" level1="MEN" level2="CASUAL" supplier="" brand="LEVIS" magnitude="1" description="Jean casual" currency="$" />
</message> |
Ejemplo de requerimiento:
SaleWallet: RefundWallet: QueryWallet: |
1.4.27.2 Respuesta
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
---|---|---|---|---|---|---|
0 | company | Numérico | X | X | X | Identificador de la compañía donde se generó la transacción. |
1 | store | Alfanumérico | X | X | X | Identificador del sitio originador de la transacción. |
2 | node | Numérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción. |
12 | amount | Importe | X | - | X | Monto de la transacción. Valor entero. Los últimos 2 dígitos corresponden a los decimales. |
13 | currencyPosCode | Alfanumérico | X | - | X | Tipos de moneda:
|
14 | payments | Numérico | O | - | - | Cantidad de cuotas. 2 dígitos como máximo. Valor entero. Si no se informa este campo, se toma por defecto el valor 1. |
24 | trxId | Numérico | X | X | X | Identificador de la transacción |
25 | dateTime | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS. El valor en este campo debe ser el mismo que el valor de la fecha y hora del requerimiento. El POS utiliza este dato para validar que se trate de la misma transacción |
26 | responseCode | Alfanumérico | X | X | X | Puede contener uno de los siguientes valores:
|
27 | isoCode | Numérico | X | X | X | Código de Respuesta emitido por el centro autorizador. 3 dígitos como máximo. Ver sección Códigos de Respuesta de VTOL Server para Billeteras Electrónicas |
28 | responseMessage | Alfanumérico | X | X | X | Mensaje de la Respuesta relacionado con el código del campo 27 |
29 | serialNumber | Numérico | O | X | X | Número que identifica la terminal lógica en la que se procesó la transacción. |
30 | businessNumber | Numérico | O | X | X | Número de comercio en el que se procesó la transacción. |
31 | lotNumber | Numérico | O | X | X | Número de lote en el que se registró la transacción. |
32 | ticket | Numérico | O | X | X | Número de Ticket correspondiente a la transacción. |
54 | additionalamount | Importe | O | O | O | Contiene el Importe del "Cashout". 12 dígitos como máximo. Valor entero. Los últimos 2 dígitos corresponden a los decimales. Para devoluciones, se debe enviar el monto total del cashout. |
142 | providerName | Alfanumérico | - | - | O | Proveedor de la tarjeta seleccionada al momento de efectuar el pago. |
166 | trxReferenceNumber | Numérico | X | X | X | Identificador único de la transacción en VTOL Server. Longitud entre 19 y 20 dígitos, debido a que utiliza el día como parte de formato |
271 | walletPaymentId | Alfanumérico | X | - | X | Identificador del número de pago informado por el Autorizador |
273 | paymentStatus | Alfanumérico | X | - | X | Estado de la transacción de pago informado por el Autorizador. Estados posibles: 0: Aprobado |
274 | paymentStatusDetail | Alfanumérico | X | - | X | Detalle del estado de la transacción de pago informado por el Autorizador |
275 | cardType | Numérico | O | - | O | Tipo de tarjeta seleccionada al momento de efectuar el pago. Valores posibles: 0: Débito |
Ejemplo de respuesta:
SaleWallet: RefundWallet: QueryWallet: |
1.4.28 Operaciones GoCuotas API QR
VTOL se integra con GoCuotas API QR para permitir efectuar pagos mediante un código QR estático por cada caja, en modalidad presencial, desde un punto de venta (POS). Al enviar la intención de compra desde VTOL a GoCuotas, se habilitará un QR que el usuario comprador deberá escanear desde la cámara de su celular y se le redireccionará a la web de GoCuotas, en donde deberá tener una cuenta registrada con una tarjeta de débito para realizar el pago. El encargado de aprobar los pagos es GOCUOTAS, quien es el encargado también de la gestión e impresión de los códigos QR. Luego VTOL deberá recibir mediante una notificación la respuesta con el estado de la orden, ya sea Confirmado o Cancelado.
Las transacciones soportadas son:
- SaleWallet = Permite realizar una compra presencial con billetera electrónica.
- RefundWallet = Permite realizar una devolución (parcial o total) de una compra presencial con billetera realizada con anterioridad.
- QueryWallet = Permite realizar una consulta de una operación de compra con billetera para conocer si la misma fue autorizada y así obtener los datos por parte del Autorizador
Definición del flujo de la operación SaleWallet:
- El POS envía la transacción de venta (SaleWallet) a VTOL.
- VTOL le envía a GoCuotas el requerimiento de Authenticacion al endpoint /api/qr/v1/authentication. Nota: el request message solo se envía si no existe un authToken vigente, la vigencia de cada authToken es de 24 hs
- GoCuotas responde a VTOL con el message HTTP 200 en donde le envía el Token de autenticación aprobado.
- VTOL se comunica con GoCuotas para enviar la intención de pago mediante un POST al endpoint /api/qr/v1/checkouts.
- GoCuotas responde con el mensaje HTTP 201 "Orden creada" y algunos campos en el messagge response como el sale_token, status, amount_in_cents, entre otros. El campo sale_token será el token que representará la nueva venta y que se deberá enviar en algunos requests.
- VTOL recibe el mensaje de que la orden fue creada. Importante: luego de la creación de la orden de pago, se tienen 15 min para realizar la confirmación del pago, si se excede el tiempo establecido, la compra será cancelada automáticamente.
- Se pueden presentar los siguientes escenarios:
- Si el usuario escanea el QR y selecciona la tarjeta de débito/ cuotas para realizar el pago dentro del tiempo establecido (15 min), entonces, VTOL recibe la notificación de la compra con el estado de la orden confirmada (status: approved), ya que el usuario realizó el pago de forma exitosa. Luego VTOL le responde al POS con el estado de la transacción aprobada (isoCode "00" y responseMessage "Aprobada").
- Si expiró el tiempo establecido de los 15 min para realizar el pago, entonces, VTOL recibe la notificación de la compra con el estado cancelada (status: denied). En este caso, la orden se cancela de forma automáticamente. Luego VTOL le responde al POS con la información de la orden cancelada.
Nota: la información de la confirmación o cancelación del pago será enviando al webhook_url que se completó al momento de crear la venta con QR. El mismo será un POST con formato JSON. En el caso de confirmación de pago por parte del cliente, el webhook será enviado en el momento. Por otro lado, si el cliente no realiza el pago, el webhook de cancelación de venta será enviado a los 15 minutos.
8. Se continua con el flujo 7.a. El POS envía el tercer mensaje de “Commit”.
9. Finaliza el flujo de la operación.
Definición del flujo de la operación RefundWallet:
- El POS le envía a VTOL la operación “RefundWallet” con los campos 271 walletPaymentId, 24 trxId (opcional) y el 12 Ammount. Nota: si la devolución es por el monto total de la compra, se deberá enviar en el campo 12 el importe total o si el importe que se desea devolver es menor al total de la compra, se deberá enviar el importe en dicho campo, y se refiere a una compra parcial.
- VTOL se comunica con GoCuotas mediante al endpoint /api/qr/v1/orders para consultar el estado de la orden, en donde se envía el saleToken que identifica la transacción original que se desea devolver.
- GoCuotas responde el código HTTP 200 con el estado de la transacción de compra y los datos de la operación. Importante: la orden debe estar confirmada (status: approved) para poder solicitar la devolución parcial o total. Una orden se marca como confirmada luego de que el usuario realiza el pago de forma exitosa.
- VTOL le responde al POS con el estado de la orden confirmada, con el campo 27 isoCode = 00 y el campo 28 responseMessage = Aprobada.
- El POS le envía a VTOL el tercer mensaje "Commit".
- VTOL se comunica con GoCuotas mediante el endpoint api/qr/v1/refund para solicitar la devolución total o parcial de una venta. Se envían los parámetros sale_token y amount_in_cents.
- GoCuotas le responde a VTOL con datos de la transacción como el status, order_reference_id, amount_in_cents, entre otros.
- Finaliza el flujo de la operación.
Dica | ||
---|---|---|
| ||
Se pueden realizar devoluciones por el monto total de la transacción y también por un monto parcial. |
Definición del flujo de la operación QueryWallet:
- El POS le envía a VTOL la operación “QueryWallet” con el campo 268: WalletPosTrxId.
- VTOL se comunica con GoCuotas mediante el endpoint /checkouts/{api_qr_sale_token}, en donde se deberá enviar un sale_token válido. Nota: VTOL solo se comunica con GoCuotas si el pago no está aprobado. Si el pago se encuentra aprobado, entonces VTOL le responde automáticamente al POS con la información de la orden aprobada, sin realizar la consulta a GoCuotas.
- GoCuotas le responde a VTOL el código HTTP 200 con el status de la operación y los otros campos definidos por GoCuotas.
- VTOL le responde al POS el estado Aprobado de la operación solicitada (saleWallet o refundWallet).
1.4.28.1 Requerimiento POS - VTOL
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
0 | company | Alfanumérico | X | X | X | Identificador de la compañía donde se generó la transacción |
1 | store | Numérico | X | X | X | Identificador del sitio originador de la transacción |
2 | node | Alfanumérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción |
3 | server | Alfanumérico | X | X | X | Identificador del Server que procesará la transacción. (en el caso de VTOL será 'VTOL') |
4 | messageType | Alfanumérico | X | X | X | Tipo de Mensaje:
|
11 | trxType | Alfanumérico | X | X | X | Tipo de Transacción:
|
12 | amount | Importe | X | X | - | Monto de la transacción. Valor entero. Los últimos 2 dígitos corresponden a los decimales. |
13 | currencyPosCode | Alfanumérico | X | X | - | Tipos de moneda:
|
16 | originalDate | Numérico | - | X | X | Fecha de realización de la compra con billetera electrónica en formato YYYYMMDD |
25 | dateTime | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS |
71 | checkPendingString | Alfanumérico | O | X | X | Indica si VTOL debe o no efectuar el chequeo de pendientes:
Default = true. |
157 | customerDoc | Numérico | X | O | - | Número de documento del cliente que realiza la consulta. Valida la cantidad de dígitos ingresados, máximo 8 dígitos. |
268 | walletPosTrxId | Alfanumérico | X | X | X | Identificador único de la transacción de billetera para la compañía. Debe ser único por tipo de transacción. Es originado por el POS para realizar una compra o devolución con billetera. Formato: |
269 | walletType | Numérico | X | X | X | Tipo de billetera por la cual se cursará la transacción en el POS. Opciones: 1: Mercado Pago 5: Yacaré 6: Plus Pagos 8: Rappi Payless 10: GoCuotas |
270 | walletPosTicket | Alfanumérico | X | - | - | Información del ticket en formato xml y posteriormente transformado en Base 64. Ver sección Estructura del campo posTicket |
271 | walletPaymentId | Alfanumérico | - | X | O | Identificador del número de pago informado por el Autorizador. |
416 | customerPhoneAreaCode | Numérico | O | - | - | Código de área de teléfono celular del cliente. Valida la cantidad de dígitos, máximo 5 dígitos. No se envía el 0 en el código de área. |
417 | customerPhone | Numérico | O | - | - | Teléfono celular del cliente. Valida la cantidad de dígitos ingresados, máximo 9 dígitos. |
418 | customerEmail | Alfanumérico | O | - | - | Mail del cliente. Valida el formato del mail: [email protected] |
1.4.28.2 Respuesta VTOL - POS
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
0 | company | Alfanumérico | X | X | X | Identificador de la compañía donde se generó la transacción |
1 | store | Numérico | X | X | X | Identificador del sitio originador de la transacción |
2 | node | Alfanumérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción |
12 | amount | Importe | X | - | X | Monto de la transacción. Valor entero. Los últimos 2 dígitos corresponden a los decimales. |
13 | currencyPosCode | Alfanumérico | X | - | X | Tipos de moneda:
|
24 | trxId | Numérico | X | X | X | Identificador de la transacción |
25 | clientDate | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS |
26 | responseCode | Alfanumérico | X | X | X | Puede contener uno de los siguientes valores:
|
27 | isoCode | Numérico | X | X | X | Código de Respuesta emitido por el centro autorizador. 3 dígitos como máximo. Ver sección Códigos de respuesta VTOL Server para GoCuotas |
28 | responseMessage | Alfanumérico | X | X | X | Mensaje de la Respuesta relacionado con el código del campo 27 |
140 | paymentType | Numérico | X | - | X | Tipo de pago. Valore posible 0: Tarjeta |
166 | trxReferenceNumber | Numérico | X | X | - | Identificador único de la transacción en VTOL Server. Longitud entre 19 y 20 dígitos, debido a que utiliza el día como parte de formato |
271 | walletPaymentId | Alfanumérico | X | - | X | Identificador del número de pago informado por el Autorizador. |
273 | paymentStatus | Alfanumérico | X | - | X | Estado de la transacción de pago informado por el Autorizador. Estados posibles: 0: Aprobado |
274 | paymentStatusDetail | Alfanumérico | - | - | X | Detalle del estado de la transacción de pago informado por el Autorizador |
275 | cardType | Numérico | X | - | X | Tipo de tarjeta seleccionada al momento de efectuar el pago. Valor posible: |
1.4.29 Operaciones GoCuotas API Full
VTOL se integra con la API Full de GOCUOTAS para permitir a los comercios aceptar esta billetera como un método de pago adicional. GoCuotas, es una billetera que permite realizar el pago con tarjeta de DEBITO de una compra hasta en 4 cuotas sin interés. Se realizarán pagos con la Billetera GOCUOTAS, en modalidad presencial, desde un punto de venta (POS). El encargado de aprobar los pagos será GOCUOTAS. VTOL enviará una intención de pago, y esperará recibir la respuesta del mismo, ya sea Aprobado o Rechazado.
En la versión API Full de GoCuotas al ingresar todos los datos para generar una venta, se le enviará un código de verificación al celular del cliente que se le deberá solicitar luego para realizar la validación de identidad y poder completar la venta. Se puede agregar una nueva tarjeta que se utilizará para completar la venta (solo es necesario para clientes nuevos o clientes que necesiten utilizar otra tarjeta). También se pueden realizar reembolsos por el monto total o parcial de la venta y consultar ordenes generadas. Las operaciones soportadas son las siguientes:
- SaleWallet = Permite realizar una compra presencial con billetera electrónica.
- RefundWallet = Permite realizar una devolución (parcial o total) de una compra presencial con billetera realizada con anterioridad.
- QueryWallet = Permite realizar una consulta de una operación de compra con billetera para conocer si la misma fue autorizada y así obtener los datos por parte del Autorizador
Definición del flujo de la operación SaleWallet:
- Se inicia con el envío de una orden de venta (transacción SaleWallet) por parte del POS a VTOL.
- VTOL le envía a GoCuotas el requerimiento de Authentication mediante el endpoint /authentication. Nota: el request message solo se envía si no existe un authToken vigente, la vigencia de cada authToken es de 24 hs.
- GoCuotas responde a VTOL con el message HTTP 200 en donde se envía el Token de autenticación aprobado.
- Luego VTOL se comunica con GoCuotas mediante endpoint / send_code, en donde se envían todos los datos necesarios para generar la venta: email, dni, area_code (sin "0"), telephone_number (sin "15"), amount_in_cents, number_of_installments, order_reference_id y Authorization: Bearer.
- GoCuotas responde a VTOL con el Message HTTP 201 y el dato "sale_token" que será el token que representará la nueva venta.
- VTOL le responde al POS el isocode 714 y el responseMessage “Orden creada, ingrese el código de verificación”
- El POS le envía a VTOL el primer QueryWallet con el campo 279: softToken.
- VTOL se comunica con GoCuotas mediante el endpoint /code_verification, en donde envía los campos sale_token, code y Authorization: Bearer. En este endpoint se envía el código de seguridad “code” que recibió el cliente en su celular para validar su identidad.
- GoCuotas le responde a VTOL con el dato de la tarjeta (card) que contiene los últimos 4 dígitos y el status de la compra. GoCuotas responde con toda la información de la venta generada y con los datos del cliente.
- VTOL le responde al POS con el isocode 718 y el responseMessage “Confirma la tarjeta recibida”.
- El POS le envía a VTOL la segunda QueryWallet (se envía el campo 6: cardNumber con los últimos cuatro dígitos de la tarjeta como eco del campo 6 de la respuesta de VTOL al POS del paso anterior).
- VTOL se comunica con Gocuotas mediante al endpoint / payments (este endpoint se utiliza para realizar el pago y completar la venta).
- GoCuotas responde a VTOL con el status aprobado de la transacción y otros datos.
- VTOL le responde al POS con el estado de la transacción aprobada (isoCode "00" y responseMessage "Aprobada")
- Por último, el POS envía el tercer mensaje de “Commit”.
Definición del flujo de la operación SaleWallet con cambio de tarjeta:
A continuación, se define el flujo para procesar un pago con cambio de tarjeta de débito "Aprobado":
- Se inicia con el envío de una orden de venta (transacción SaleWallet) por parte del POS a VTOL.
- VTOL le envía a GoCuotas el requerimiento de Authentication mediante el endpoint /authentication. Nota: el request message solo se envía si no existe un authToken vigente, la vigencia de cada authToken es de 24 hs.
- GoCuotas responde a VTOL con el Message HTTP 200 en donde se envía el Token con la respuesta Aprobado.
- Luego VTOL se comunica con GoCuotas mediante endpoint / send_code, en donde se envían todos los datos necesarios para generar la venta: el email, dni, area_code (sin "0"), telephone_number (sin "15"), amount_in_cents, number_of_installments, order_reference_id y Authorization: Bearer.
- GoCuotas responde a VTOL con el Message HTTP 201 y el dato"sale_token" que será el token que representará la nueva venta.
- VTOL le responde al POS el isocode 714 y el responseMessage “Orden creada, ingrese el código de verificación”
- El POS le envía a VTOL el primer QueryWallet con el campo 279: softToken.
- VTOL se comunica con GoCuotas mediante el endpoint / code_verification, en donde le envía los campos sale_token, code y Authorization: Bearer. En este endpoint se envía el código de seguridad “code” que recibió el cliente en su celular para validar su identidad.
- GoCuotas le responde a VTOL con el dato de la tarjeta (card) que contiene los últimos 4 dígitos y el status de la compra. GoCuotas responde con toda la información de la venta generada y con los datos del cliente.
- VTOL le responde al POS con el isocode 718 y el responseMessage “Confirma la tarjeta recibida”.
- El POS le envía a VTOL la segunda QueryWallet con los campos, "6: cardNumber" (dieciséis dígitos de la tarjeta), "8: cvc" (tres dígitos), expirationDate (cuatro dígitos en formato AAMM).
- VTOL le envía a GoCuotas el requerimiento del cambio de tarjeta mediante el endpoint / cards (este endpoint se utiliza en el caso de que el cliente no tenga ninguna tarjeta cargada en el sistema de GoCuotas o si es necesario cambiar de tarjeta para realizar el pago).
- GoCuotas le responde a VTOL con los siguientes datos: sale_token, status, last_four_digits, entre otros.
- VTOL le responde al POS con el isocode 718 y el responseMessage “Confirma la tarjeta recibida”.
- El POS le envía a VTOL la tercera QueryWallet con el "campo 6: cardNumber".
- VTOL se comunica con Gocuotas mediante al endpoint / payments (este endpoint se utiliza para realizar el pago y completar la venta).
- GoCuotas responde a VTOL con los campos payment_successfully_confirmed: true, "status": "approved", card, entre otros.
- VTOL le envía al POS el response message "Aprobada".
Definición del flujo de la operación SaleWallet con cambio de tarjeta que excede el tiempo máximo (2min) para realizar el pago:
A continuación, se define el flujo para procesar un pago con cambio de tarjeta superando el tiempo máximo (2min) para realizar el pago:
- Se inicia con el envío de una orden de venta (transacción SaleWallet) por parte del POS a VTOL.
- VTOL le envía a GoCuotas el requerimiento de Authentication mediante el endpoint /authentication. Nota: el request message solo se envía si no existe un authToken vigente, la vigencia de cada authToken es de 24 hs.
- GoCuotas responde a VTOL con el Message HTTP 200 en donde se envía el Token con la respuesta Aprobado.
- Luego VTOL se comunica con GoCuotas mediante endpoint / send_code, en donde se envían todos los datos necesarios para generar la venta: el email, dni, area_code (sin "0"), telephone_number (sin "15"), amount_in_cents, number_of_installments, order_reference_id y Authorization: Bearer.
- GoCuotas responde a VTOL con el Message HTTP 201 y el dato del "sale_token" que será el token que representará la nueva venta.
- VTOL le responde al POS el isocode 714 y el responseMessage “Orden creada, ingrese el código de verificación”
- El POS le envía a VTOL el primer QueryWallet con el campo 279: softToken.
- VTOL se comunica con GoCuotas mediante el endpoint / code_verification, en donde le envía los campos sale_token, code y Authorization: Bearer. En este endpoint se envía el código de seguridad “code” que recibió el cliente en su celular para validar su identidad.
- GoCuotas le responde a VTOL con el dato de la tarjeta (card) que contiene los últimos 4 dígitos y el status de la compra. GoCuotas responde con toda la información de la venta generada y con los datos del cliente.
- VTOL le responde al POS con el isocode 718 y el responseMessage “Confirma la tarjeta recibida”.
- El POS le envía a VTOL la segunda QueryWallet con los campos, "6 cardNumber" (dieciséis dígitos de la tarjeta), "8 cvc" (tres dígitos), expirationDate (cuatro dígitos en formato AAMM). También se debe informar el campo "269 WalletType" con GoCuotas.
- VTOL le envía a GoCuotas el requerimiento del cambio de tarjeta mediante el endpoint /cards (este endpoint se utiliza en el caso de que el cliente no tenga ninguna tarjeta cargada en en el sistema de GoCuotas o si es necesario cambiar de tarjeta para realizar el pago).
- GoCuotas le responde a VTOL con los siguientes datos: sale_token, status, last_four_digits, entre otros
- VTOL le responde al POS con el isocode 718 y el responseMessage “Confirma la tarjeta recibida”.
- El POS le envía a VTOL la tercera QueryWallet con el "campo 6: cardNumber" en donde se deben ingresar los cuatro últimos dígitos de la tarjeta para confirma el pago.
- VTOL se comunica con Gocuotas mediante el endpoint / payments. Se valida que se excede el tiempo determinado de 2 minutos para realizar el pago.
- GoCuotas responde "Response message: (confirmed: false....)"
- VTOL responde al POS "Response message: Error 604, No se puede realizar el pago, reinicie la operación"
- Se reitera nuevamente el envío de una orden de venta (transacción SaleWallet) por parte del POS a VTOL.
- VTOL se comunica con GoCuotas mediante el endpoint / send_code, en donde se envían los datos del email, dni, area_code (sin "0"), telephone_number (sin "15"), amount_in_cents, number_of_installments, order_reference_id y Authorization: Bearer.
- GoCuotas responde a VTOL con el Message HTTP 200 (verificar cód de respuesta) y el dato del "sale_token".
- VTOL le responde al POS el isocode 714 y el responseMessage “Orden creada, ingrese el código de verificación”
- El POS le envía a VTOL la cuarta QueryWallet con el campo 279: softToken.
- VTOL se comunica con GoCuotas mediante el enpoint “code_verification”, en donde le envía los campos sale_token, code y Authorization: Bearer.
- El POS le envía a VTOL la quinta QueryWallet enviando el campo 6: cardNumber con los últimos cuatro dígitos de la tarjeta para confirmar el pago.
- VTOL se comunica con Gocuotas mediante al endpoint / payments.
- GoCuotas responde a VTOL con el status aprobado de la transacción y otros datos.
- VTOL le responde a POS con el estado de la transacción aprobada (isoCode "00" y responseMessage "Aprobada")
- Por último, el POS envía el tercer mensaje de “Commit”.
Definición del flujo de la operación RefundWallet:
- El POS le envía a VTOL la operación “RefundWallet” con los campos 271 walletPaymentId, 24 trxId (opcional) y el 12 Ammount. Nota: si la devolución es por el monto total de la compra, se deberá enviar en el campo 12 el importe total. Si el importe que se desea devolver es menor al total de la compra, se deberá enviar el importe en dicho campo, y se refiere a una compra parcial.
- VTOL se comunica con GoCuotas mediante el endpoint / orders para consultar la orden, en donde se envía el saleToken y el Authorization: Bearer.
- GoCuotas responde el código HTTP 200 con el status de la transacción de compra y los datos de la operación.
- VTOL le responde al POS.
- VTOL se comunica con GoCuotas mediante el endpoint / refund para solicitar la devolución total o parcial de una venta. Se envían los parámetros sale_token y el amount_in_cents.
- GoCuotas le responde a VTOL con datos de la transacción del refundWallet. Si la devolución se realiza por el monto total de la compra, entonces en el campo status aparece “denied”. Si el monto es menor que el importe total de la compra entonces aparece “Approved”.
Informações | ||
---|---|---|
| ||
Las devoluciones se deben realizar desde la misma caja donde se realizó la venta original. |
Informações | ||
---|---|---|
| ||
|
Definición del flujo de la operación QueryWallet:
- El POS le envía a VTOL la operación “QueryWallet” con el campo 268: WalletPosTrxId.
- VTOL se comunica con GoCuotas mediante el endpoint / orders, en donde se envía el saleToken y el Authorization: Bearer. Nota: VTOL solo se comunica con GoCuotas si el pago no está aprobado. Si el pago se encuentra aprobado, entonces VTOL le responde automáticamente al POS con la información de la orden aprobada, sin realizar la consulta a GoCuotas.
- GoCuotas responde con el código HTTP 200 y con el status de la solicitud del QueryWallet de la transacción de compra.
- VTOL le responde al POS el estado Aprobada de la operación solicitada (saleWallet o refundWallet).
1.4.29.1 Requerimiento POS - VTOL
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
0 | company | Alfanumérico | X | X | X | Identificador de la compañía donde se generó la transacción |
1 | store | Numérico | X | X | X | Identificador del sitio originador de la transacción |
2 | node | Alfanumérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción |
3 | server | Alfanumérico | X | X | X | Identificador del Server que procesará la transacción. (en el caso de VTOL será 'VTOL') |
4 | messageType | Alfanumérico | X | X | X | Tipo de Mensaje:
|
11 | trxType | Alfanumérico | X | X | X | Tipo de Transacción:
|
12 | amount | Importe | X | X | - | Monto de la transacción. Valor entero. Los últimos 2 dígitos corresponden a los decimales. |
13 | currencyPosCode | Alfanumérico | X | X | - | Tipos de moneda:
|
14 | payments | Numérico | X | X | - | Cantidad de cuotas seleccionadas al momento de realizar el pago. Valida la cantidad de cuotas ingresadas, solo se admiten los valores 2, 3 y 4. |
16 | originalDate | Numérico | - | X | X | Fecha de realización de la compra con billetera electrónica en formato YYYYMMDD |
25 | dateTime | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS |
71 | checkPendingString | Alfanumérico | X | X | X | Indica si VTOL debe o no efectuar el chequeo de pendientes:
|
157 | customerDoc | Numérico | X | - | - | Número de documento del cliente que realiza la consulta. Valida la cantidad de dígitos ingresados, máximo 8 dígitos. |
268 | walletPosTrxId | Alfanumérico | X | X | X | Identificador único de la transacción de billetera para la compañía. Debe ser único por tipo de transacción. Es originado por el POS para realizar una compra o devolución con billetera. Formato: |
269 | walletType | Numérico | X | X | X | Tipo de billetera por la cual se cursará la transacción en el POS. Opciones: 1: Mercado Pago 5: Yacaré 6: Plus Pagos 8: Rappi Payless 10: GoCuotas |
270 | walletPosTicket | Alfanumérico | X | O | - | Información del ticket en formato xml y posteriormente transformado en Base 64. Ver sección Estructura del campo posTicket |
271 | walletPaymentId | Alfanumérico | - | X | O | Identificador del número de pago informado por el Autorizador. |
416 | customerPhoneAreaCode | Numérico | X | - | - | Código de área de teléfono celular del cliente. Valida la cantidad de dígitos, máximo 5 dígitos. No se envía el 0 en el código de área. |
417 | customerPhone | Numérico | X | - | - | Teléfono celular del cliente. Valida la cantidad de dígitos ingresados, máximo 9 dígitos. |
418 | customerEmail | Alfanumérico | X | - | - | Mail del cliente. Valida el formato del mail: [email protected] |
Informações | ||
---|---|---|
| ||
Si se realiza un cambio de tarjeta se debe enviar en la segunda QueryWallet de POS a VTOL los campos especificados para la operación SaleWallet y lo siguiente:
|
1.4.29.2 Respuesta VTOL - POS
Informações | ||
---|---|---|
| ||
X = Obligatorio |
Número | Nombre del campo | Tipo de dato | SaleWallet | RefundWallet | QueryWallet | Descripción |
1 | store |
Numérico | X | X | X | Identificador del sitio originador de la transacción |
2 | node |
Alfanumérico | X | X | X | Identificación del nodo, en el sitio originador, donde se generó la transacción |
12 | amount | Importe | X | - | X | Monto de la transacción. Valor entero. Los últimos 2 dígitos corresponden a los decimales. |
13 | currencyPosCode | Alfanumérico | X | - | X | Tipos de moneda: |
|
14 | payments | Numérico |
X | - |
X | Cantidad de cuotas |
seleccionadas al momento de realizar el pago. Solo se admiten los valores 2, 3 y 4. | ||||||
24 | trxId | Numérico | X | X | X | Identificador de la transacción |
25 |
clientDate | Numérico | X | X | X | Fecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS |
26 | responseCode | Alfanumérico | X | X | X | Puede contener uno de los siguientes valores:
|
| ||||||
27 | isoCode | Numérico | X | X | X | Código de Respuesta emitido por el centro autorizador. 3 dígitos como máximo. Ver sección Códigos de |
28 | responseMessage | Alfanumérico | X | X | X | Mensaje de la Respuesta relacionado con el código del campo 27 |
140 |
paymentType | Numérico |
Contiene el Importe del "Cashout". 12 dígitos como máximo. Valor entero. Los últimos 2 dígitos corresponden a los decimales.
Para devoluciones, se debe enviar el monto total del cashout.
X |
- | X | Tipo de pago. Valore posible 0: Tarjeta | ||
166 | trxReferenceNumber | Numérico | X | X |
- | Identificador único de la transacción en VTOL Server. Longitud entre 19 y 20 dígitos, debido a que utiliza el día como parte de formato | |||||
271 | walletPaymentId | Alfanumérico | X | - | X | Identificador del número de pago informado por el Autorizador. |
273 | paymentStatus | Alfanumérico | X | - | X | Estado de la transacción de pago informado por el Autorizador. Estados posibles: 0: Aprobado |
Tipo de tarjeta seleccionada al momento de efectuar el pago.
Valores posibles:
0: Débito
1: Crédito
Ejemplo de respuesta:
SaleWallet:
{25:20220303133649;2:1;1:1;0:1;12:8100;275:0;13:$;27:514;273:0;140:0;14:0;26:ISO8583;28:Tiempo expirado. Elija Consultar o Cancelar;24:13;166:3032213365800000020;271:03013659-d8ec-4e06-974c-e967f83e782e}
RefundWallet:
{2:1;1:1;0:1;24:14;25:20220303133836;26:ISO8583;27:514;28:Tiempo expirado. Elija Consultar o Cancelar;166:3032213385800000021}
{0:1;1:1;2:1;12:8100;13:$;24:14;25:20220303133921;26:ISO8583;27:00;28:APROBADA;166:3032213385800000021;271:03013858-d8ec-4e06-974c-e967f83e782e;273:0;274:CONFIRMED}
: Contracargo | ||||||
274 | paymentStatusDetail | Alfanumérico | - | - | X | Detalle del estado de la transacción de pago informado por el Autorizador |
275 | cardType | Numérico | X | - | X | Tipo de tarjeta seleccionada al momento de efectuar el pago. Valor posible: |
Âncora_Toc485222740 _Toc485222740
1.5 Códigos de Respuesta al POS
_Toc485222740 | |
_Toc485222740 |
...
Código | Descripción |
---|---|
00 | APROBADA |
57 | TRANSACCION NO PERMITIDA |
500 | Sucursal no configurada Billetera RappiPayless |
503 | Compañia no configurada Billetera RappiPayless |
509 | Estado trx original no acepta devolucion |
510 | Importe devolucion supero monto limite |
533 | Devolucion parcial no soportada |
537 | Se excedio el tiempo limite para devolver |
539 | Devuelto |
544 | Transaccion ya devuelta |
545 | Cancelado |
549 | No existe comunicación con RappiPayless |
553 | Pago rechazado por diferencias en la orden |
585 | Transacción con CashBack no permitido |
586 | Imposible identificar el comercio. Verifique datos |
595 | Intención de pago vencida en Billetera |
599 | Error de validacion |
601 | No se pudo realizar la operación, reintente |
602 | Devolucion rechazada |
605 | La transaccion no se puede anular |
606 | Identificador de transaccion incorrecto |
607 | No se pudo realizar la devolucion |
611 | Código de barras invalido |
619 | No se pudo realizar la cancelación |
620 | Reintente pago por modo offline con código PIN |
Transaccion ya devuelta | |
545 | Cancelado |
549 | No existe comunicación con RappiPayless |
553 | Pago rechazado por diferencias en la orden |
585 | Transacción con CashBack no permitido |
586 | Imposible identificar el comercio. Verifique datos |
595 | Intención de pago vencida en Billetera |
599 | Error de validacion |
601 | No se pudo realizar la operación, reintente |
602 | Devolucion rechazada |
605 | La transaccion no se puede anular |
606 | Identificador de transaccion incorrecto |
607 | No se pudo realizar la devolucion |
611 | Código de barras invalido |
619 | No se pudo realizar la cancelación |
620 | Reintente pago por modo offline con código PIN |
Âncora | ||||
---|---|---|---|---|
|
A continuación, se detallan las respuestas posibles de VTOL Server, cuando se opera con GoCuotas:
Código | Descripción |
---|---|
503 | Compañia GoCuotas no configurada |
601 | No se pudo crear la orden, reintente operación |
623 | Respuesta GoCuotas inválida, reintente operación |
714 | Orden creada, ingrese el código de verificación |
599 | Error de validación |
540 | Pendiente de pago |
553 | Rechazado |
539 | Devuelto |
717 | Ingrese tarjeta de débito |
718 | Confirma la tarjeta recibida |
77 | ERROR [plan]/CUOTAS |
601 | No se pudo confirmar el código, reintente. |
622 | No se pudo agregar/cambiar la tarjeta, reintente. |
603 | No se pudo realizar el pago, reintente. |
549 | No existe comunicación con GoCuotas |
602 | Devolución rechazada |
604 | No se pudo realizar el pago, reinicie la operación |
Âncora | ||||
---|---|---|---|---|
|
...
- En caso de que el campo requiredAdvice tenga valor true, el POS debe enviar en el tercer mensaje Commit, los campos chipTokens (criptograma del Advice) y pinpadResponseCode (código autorización del Pinpad).
Estos datos se incluyen en el campo 200 –extraData-, con el siguiente formato:
[adviceChipTokens|valor,pinpadResponseCode|valor]
Nota: Si el campo requiredAdvice no tiene valor true, se envía el tercer mensaje sin el campo de datos extras.
Importante: Para operaciones por CHIP siempre se debe enviar el campo 200 (extraData) en el Tercer Mensaje de COMMIT, informando los valores: adviceChipTokens, pinpadResponseCode y pinpadAutCode.
Ejemplo:
Bloco de código | ||
---|---|---|
| ||
[adviceChipTokens|9F1E08313534393734353682021C009F26086CA64413F38FF76F9F2701809F360200799F100706010A03A08800950580C00080009F3303E0F8C89F34031E03009F3704FE4084CE5F25031801019A032505279F02060000001050009C01008407A00000000310109F0306000000000000,pinpadResponseCode|00,pinpadAutCode|123456] |
2. VTOL procesa el tercer mensaje registrando el código de respuesta del Pinpad (Aprobada o Rechazada) y genera el Advice a enviar hacia el autorizador incluyendo los datos recibidos en el Commit.
...