Imagen generada

ADMINISTRACIÓN VTOL




Fecha

Versión

Descripción

25/06/20241.0Se agrega el proceso y la mensajería de GOCuotas API QR en el manual de emvkit

 

1.1Se agregan los campos 6,142 y 422 en la respuesta del pago Aprobado

1.    Introducción

1.1.  Propósito

Definir los procesos y la mensajería de emvkit para operar con GOCuotas API QR. 


2. GOCuotas API QR

  • Procesar Intención de compra Aprobado (saleWallet)

A continuación, se especifica el flujo de la operación SaleWallet:

  1. Envío de la transacción:
    El POS envía la transacción de venta (SaleWallet) a VTOL.

  2. Autenticación:
    VTOL envía una solicitud de autenticación a GoCuotas mediante el endpoint /api/qr/v1/authentication.

    • Nota: El mensaje de solicitud se envía solo si no existe un authToken vigente. La vigencia de cada authToken es de 24 horas.

  3. Recepción del token:
    GoCuotas responde a VTOL con un mensaje HTTP 200, donde se incluye el Token de autenticación aprobado. Este token será utilizado en futuras interacciones con la API de GoCuotas.

  4. Intención de pago:
    VTOL se comunica con GoCuotas para enviar la intención de pago mediante un POST al endpoint /api/qr/v1/checkouts.

  5. Confirmación del pago:

    • GoCuotas responde con el mensaje HTTP 201 "Orden creada".

      • En la respuesta se incluyen varios campos, como el sale_token, status, amount_in_cents, entre otros. El sale_token es el token que representará la venta y será utilizado en futuros requests.

    • VTOL recibe la notificación de que la orden fue creada.

    • Importante: Después de la creación de la orden de pago, VTOL tiene un plazo de 15 minutos para confirmar el pago. Si se excede el tiempo, la compra será cancelada automáticamente.

  6. VTOL recibe el mensaje de que la orden fue creada:
    • Importante: Luego de la creación de la orden de pago, VTOL tiene un plazo de 15 minutos para confirmar el pago. Si se excede el tiempo establecido, la compra será cancelada automáticamente.
  7. Escenarios posibles:

    • Pago aprobado: 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 pago fue realizado con éxito.

      • Respuesta a POS: VTOL responde al POS con el estado de la transacción aprobada (isoCode 00 y responseMessage Aprobada).

    • Pago cancelado: Si el tiempo para completar el pago expira (15 min), VTOL recibe la notificación de que la compra fue cancelada (status: denied).

      • Respuesta a POS: VTOL responde al POS con la información de la orden cancelada.

  8. Notificación a webhook:

    • La información sobre la confirmación o cancelación del pago se enviará al webhook_url proporcionado al momento de crear la venta con QR. El webhook será enviado en formato JSON.

    • Si el cliente realizó el pago, el webhook de confirmación se enviará de inmediato.

    • Si el cliente no realiza el pago en el plazo establecido, el webhook de cancelación será enviado a los 15 minutos.

  9. Devolución de datos adicionales al POS :

    1. En la respuesta de pago aprobado, se deben retornar los siguientes campos adicionales:

      1. walletTransactionId (422): El ID de la transacción proporcionado por GoCuotas.

      2. cardNumber (6): El número de tarjeta utilizado para el pago.

      3. providerName (142): El nombre del proveedor de la tarjeta.

    2. Estos campos se obtienen realizando una consulta adicional a GoCuotas a través del endpoint /api/qr/v1/orders para consultar el estado de la transacción y extraer la información del pago aprobado.

    3. Los campos obtenidos de GoCuotas deben ser persistidos en la base de datos de VTOL y enviados en la respuesta a POS.

  10. Confirmación final:
    Después de la confirmación del pago, el POS envía el tercer mensaje de “Commit”.

  11. Finalización del flujo:
    El flujo de la operación SaleWallet se completa tras la confirmación o cancelación del pago, con la información final del estado de la transacción enviada al POS.

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.

  • Diagrama de secuencia del Pago con envío de notificación en tiempo (orden confirmada "Approved")



  • Procesar Devolución (RefundWallet):

A continuación, se define el flujo de RefundWallet con GoCuotas versión API QR:

  1. 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.
  2. 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.
  3. 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.
  4. VTOL le responde al POS con el estado de la orden confirmada, con el campo 27 isoCode = 00 y el campo 28 responseMessage = Aprobada.
  5. El POS le envía a VTOL el tercer mensaje "Commit".
  6. 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.
  7. GoCuotas le responde a VTOL con datos de la transacción como el status, order_reference_id, amount_in_cents, entre otros.
  8. Finaliza el flujo de la operación.

IMPORTANTE

  • Se pueden realizar devoluciones por el monto total de la transacción o por un monto parcial.
  • La devolución debe generarse desde la misma caja en que se realizó la venta, ya que las órdenes están vinculadas a una caja específica. Si se intenta realizar la devolución desde una caja diferente, no se encontrará dicha orden y la operación fallará.


  • Diagrama de secuencia operación "RefundWallet"


IMPORTANTE

Las devoluciones deben generarse desde la misma caja donde se efectuó la venta.
Las órdenes están asociadas a una caja específica, por lo que si se intenta desde otra caja, la orden no podrá ser localizada ni devuelta.

A continuación, se agrega el flujo de operación en donde se envía desde el POS la solicitud de Rollback y la orden se encuentra en estado Approved, la cual termina en un RefundWallet:

  • Procesar consulta (QueryWallet):

A continuación, se define el flujo de la operación QueryWallet en GoCuotas API QR:

  1. El POS le envía a VTOL la operación “QueryWallet” con el campo 268: WalletPosTrxId.
  2. 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.
  3. GoCuotas le responde a VTOL el código HTTP 200 con el status de la operación y los otros campos definidos por GoCuotas.
  4. VTOL le responde al POS el estado Aprobado de la operación solicitada (saleWallet o refundWallet).


  • Mensajería POS - VTOL de las transacciones SaleWallet, RefundWallet y QueryWallet

    • Request POS - VTOL:

Referencias:

X = Mandatorio

O = Opcional

- = No requerido

Número

Nombre del campo

Tipo de dato

SaleWallet

RefundWallet

QueryWallet

Descripción

0companyNuméricoXXXIdentificador 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

-

Identificador del Server que procesará la transacción. (en el caso de VTOL será 'VTOL')

4

messageType

Alfanumérico

-

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

X

X

Tipo de Transacción:

  • SaleWallet = Permite realizar una compra presencial con billetera.
  • RefundWallet = Permite realizar una devolución (parcial o total) de una compra presencial con billetera realizada con anterioridad.
  • QueryWallet = Consulta de transacción de compra realizada con billetera electrónica.

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:

  • $ = Pesos
  • U$S = Dólares

16

originalDateNumérico-XX

Fecha de realización de la compra con billetera electrónica en formato YYYYMMDD

24

trxId

Numérico

-

O

-

Identificador de la transacción

25

dateTimeNuméricoXXXFecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS

71

checkPendingStringAlfanumérico
X-

Indica si VTOL debe o no efectuar el chequeo de pendientes:

  • true = activa chequeo de pendientes.
  • false = desactiva chequeo de pendientes.

157

customerDocNuméricoX--

Número de documento del cliente que realiza la consulta.

Valida la cantidad de dígitos ingresados, máximo 8 dígitos.

268walletPosTrxIdAlfanuméricoXXX

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:
codigoTienda (longitud 10) + codigoCaja (longitud 10) + Fecha (AAMMDDHHmmss) (longitud 12)
Longitud total de 32

269walletTypeNuméricoXXX

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

270walletPosTicketAlfanuméricoX--Información del ticket en formato xml y posteriormente transformado en Base 64.  Ver sección Estructura del campo posTicket
271

walletPaymentId

 Numérico

-


X

Identificador del número de pago informado por el Autorizador.

416customerPhoneAreaCodeNuméricoO--

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. 

417customerPhoneNuméricoO--

Teléfono celular del cliente. 

Valida la cantidad de dígitos ingresados, máximo 9 dígitos.

418customerEmail AlfanuméricoO--

Mail del cliente. 

Valida el formato del mail: [email protected]


Ejemplo log .lib:

Request to VTOL (SaleWallet):

Request: {270:PG1lc3NhZ2UgY29tcGFueUlkPSJzdHMiIHN0b3JlPSIwMDAwMSIgdGVybWluYWw9IjAxMCIgZGF0
ZS10aW1lPSIyMDE3LTEyLTA0IDEyOjMwOjAwOiIgbWVzc2FnZUlkPSIwMDEwIiB2b2lkLXRyeD0i
ZmFsc2UiIHJlc3BvbnNlPSJ0cnVlIiBpbml0LXRjaz0idHJ1ZSIgZXZhbHVhdGU9InRydWUiIHN0
YXR1cz0icGF5bWVudCIgbXNnLXZlcnNpb249IjIuMCIgbWFwLXZlcnNpb249IjE1Ij4KCTxpdGVt
LWFkZCBzZXE9IjEiIGNvZGU9IjAwMDEiIGRpc2NvdW50YWJsZT0idHJ1ZSIgdW5pdHByaWNlPSIy
NDAwLjAiIHF0eT0iMS4wIiBsZXZlbDE9Ik1FTiIgbGV2ZWwyPSJDQVNVQUwiIHN1cHBsaWVyPSIi
IGJyYW5kPSJMRVZJUyIgeHByaWNlPSIyNDAwLjAiIG1hZ25pdHVkZT0iMS4wIiBkZXNjcmlwdGlv
bj0iSmVhbiBjYXN1YWwiIGN1cnJlbmN5PSIkIiAvPgo8L21lc3NhZ2U+Cg==;269:10;268:0000000015000007048620252213022237;13:$;12:240000;11:SaleWallet;2:70486;25:20250613142237;1:15} 

Request to VTOL (RefundWallet):

Request: {271:0000000001000000000120243104053105;269:10;16:20240404;268:0000000001000000000120243204053203;13:$;12:8100;11:RefundWallet;2:1;25:20240404173203;1:1;0:1}

Request to VTOL (QueryWallet):

Request: {269:10;16:20240408;268:0000000001000000000120245308035340;25:20240408155500;2:1;1:1;11:QueryWallet}


    • Response VTOL - POS

Referencias:

X = Mandatorio

O = Opcional

- = No requerido

Número

Nombre del campo

Tipo de dato

SaleWallet

RefundWallet

QueryWallet

Descripción

0companyNuméricoOOOIdentificador 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

6

cardNumber

Alfanumérico

O

-O

Tarjeta enmascarada seleccionada por el cliente al momento de efectuar el pago.

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:

  • $ = Pesos
  • U$S = Dólares

24

trxId

Numérico

X

X

X

Identificador de la transacción

25

clientDateNuméricoXXXFecha y hora de realización de la transacción en formato YYYYMMDDHHMMSS

26

responseCodeAlfanuméricoXXX

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

isoCodeNuméricoXXX

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

responseMessageAlfanuméricoXXXMensaje de la Respuesta relacionado con el código del campo 27

140

paymentTypeNuméricoX-X

Tipo de pago. Valore posible 0: Tarjeta

142

providerNameAlfanuméricoO-O

Nombre del proveedor de la tarjeta utilizada

166

trxReferenceNumberNumérico-XOIdentificador ú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

walletPaymentIdAlfanuméricoX-XIdentificador del número de pago informado por el Autorizador.

273

paymentStatusAlfanuméricoX-X

Estado de la transacción de pago informado por el Autorizador.

Estados posibles:

0: Aprobado
1: Devuelto
2: Pendiente
3: Autorizado
4: En Progreso
5: En mediacion
6: Rechazado
7: Cancelado
8: Contracargo
9: Reversado

274

paymentStatusDetail

Alfanumérico

-

XX

Detalle del estado de la transacción de pago informado por el Autorizador

275

cardTypeNuméricoX-X

Tipo de tarjeta seleccionada al momento de efectuar el pago.

Valor posible:
0: Débito

401

walletPaymentMethodFormato Json-X-

Información de los planes de pago. La estructura de este campo está definida en la siguiente sección del documento.

422

walletTransactionIdNuméricoO-OID de la transacción en GoCuotas

1010

currentSessionId

NuméricoX--Identificador de la sesión actual

1027

libResponseCode

Numérico

X--

Código de respuesta de la librería.

Indica cómo fue procesada la operación en EMVKIT:

Éxito = 000
Error <> 000

1028

libResponseMessage

Alfanumérico

X--Mensaje descriptivo del código de respuesta de la librería


Ejemplo log lib:

SaleWallet:

Response message: {1:15;2:70486;1027:000;1028:Ok;12:240000;140:0;13:$;271:624983401;273:0;274:Pending;1010:1749846186351;275:0;24:22;25:20250613172441;26:ISO8583;27:514;28:Tiempo expirado. Elija Consultar o Cancelar pago} 

RefundWallet:

Response message: {0:1;1:1;2:1;1010:1712262719597;1027:000;1028:Ok;166:4042417320700000087;24:45;25:20240404173203;26:ISO8583;27:00;28:APROBADA}

QueryWallet:

Response message: {1:15;2:70486;1027:000;1028:Ok;422:8572721;6:45079******4905;140:0;12:240000;13:$;142:Visa Débito;271:537683616;273:0;274:approved;1010:1749835338501;275:0;22:00;24:17;25:20250613142318;26:ISO8583;27:00;28:APROBADA} 

  • Sem rótulos