9. Recibiendo la respuesta.

Para cada operación de venta, reimpresión o cancelación la terminal enviará la respuesta en formato JSON a un servicio para que pueda ser procesada. Dicho servicio puede ser local en la intranet, o estar expuesto públicamente en internet mediante una URL o IP. A continuación se detallan los requisitos para que puedas desarrollar dicho servicio.

8.1 Cosas a tener en cuenta.

  • Se puede emplear cualquier lenguaje de programación que se desee siempre y cuando éste permita crear una API REST.
  • El servicio debe estar funcionando siempre que se requiera realizar cobros con la terminal ya que es ahí donde se enviará la respuesta de la operación.
  • La terminal debe poder alcanzar el servicio en todo momento para poder realizar el flujo completo de una transacción.
  • En caso de que la terminal indique que no puede enviar la respuesta al servicio, se debe verificar inmediatamente si el servicio está funcionando correctamente para poder realizar el flujo correcto de una transacción.

8.2 Requisitos.

  • Al consumir el servicio, éste debe regresar un HTTP Status Code 200.
  • Para validar que la petición de transacción se realizó correctamente, es necesario configurar una respuesta, la cual, debe ser un JSON, cuyo body debe contener los parámetros mostrados a continuación. (El mensaje dentro del parámetro message puede contener cualquier texto y el parámetro code debe regresar un 00).
{
    "code": "00",
    "message": "Recibido"
}

8.3 Modelo de datos

Cuando se realiza una venta, reimpresión o cancelación, se envía en formato JSON la respuesta de la operación al servicio de respuesta con un modelo de datos como se muestra en la siguiente tabla:

Id

Nombre campo

Descripción

Tipo de dato

1

affiliation

Número de afiliación del comercio

VARCHAR2(50 BYTE)

2

applicationLabel

Información sobre la lectura de la tarjeta.

VARCHAR2(100 BYTE)

3

arqc

Información sobre la lectura de la tarjeta.

VARCHAR2(250 BYTE)

4

aid

Información sobre la lectura de la tarjeta.

VARCHAR2(50 BYTE)

5

amount

Monto total de la transacción con todo y propina.

VARCHAR(250 BYTE)

6

authCode

Valor generado por la autoridad de autorización para una transacción aprobada.

VARCHAR2(7 BYTE)

7

bin

Primeros 6 digitos de la tarjeta.

VARCHAR2(6 BYTE)

8

bankName

Nombre de la institución financiera emisora de la tarjeta.

VARCHAR2(250 BYTE)

9

cardExpDate

Fecha de expiración de la tarjeta en formato MM/YY.

VARCHAR2(5 BYTE)

10

cardType

Identificador de tipo de tarjeta. Débito (D), crédito (C).

VARCHAR2(20 BYTE)

11

cardTypeName

Representa el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc.

VARCHAR2(250 BYTE)

12

cityName

Ciudad con la que se dió de alta el comercio.

VARCHAR2(150 BYTE)

13

responseCode

Código de respuesta en función del estatus de la transacción. El valor 00 representa una transacción exitosa, cualquier otro valor se puede tomar como un problema con la transacción.

VARCHAR2(2 BYTE)

14

folioNumber

Número identificador de transacción que puede ser enviado en la solicitud de venta.

VARCHAR2(250 BYTE)

15

hasPin

Indica si la transacción fue aprobada mediante NIP.

BOOLEAN(FALSE,TRUE)

16

hexSign

Firma autógrafa en caso de que la tarjeta no cuente con NIP.

VARCHAR2(4000 BYTE)

17

isQps

Indica el monto cobrado por quick payment service.

NUMBER(15,2)

18

message

Mensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo.

VARCHAR2(200 BYTE)

19

isRePrint

Mensaje que indica si la transacción es un duplicado o una venta.

Venta:false
Reimpresion:true

BOOLEAN(FALSE,TRUE)

20

moduleCharge

Identificador interno.

VARCHAR2(20 BYTE)

21

moduleLote

Identificador interno.

VARCHAR (9)

22

customerName

Nombre del tarjeta habiente.

VARCHAR2(100 BYTE)

23

terminalId

Número de serie de la terminal.

VARCHAR2(20 BYTE)

24

orderId

Identificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación.

VARCHAR2(36 BYTE)

25

preAuth

Pre-autorización.

VARCHAR (9)

26

preStatus

Pre-autorización.

NUMBER(15,2)

27

promotion

Indica el número de meses sin intereses en que una transacción fue parcializada.

VARCHAR2(20 BYTE)

28

rePrintDate

Indica la versión de la aplicación.

VARCHAR2(100 BYTE)

29

rePrintMark

Identificador interno.

VARCHAR2(100 BYTE)

30

reprintModule

Identificador interno.

VARCHAR2(1 BYTE)

31

cardNumber

Últimos 4 dígitos de la tarjeta leída.

VARCHAR2(50 BYTE)

32

storeName

Nombre del comercio dado de alta.

VARCHAR2(60 BYTE)

33

streetName

Dirección del comercio dado de alta.

VARCHAR2(150 BYTE)

34

ticketDate

Fecha y hora de la transacción.

VARCHAR2(100 BYTE)

35

tipAmount

Indica el monto para propina, en caso de ser enviado.

VARCHAR()

36

tipLessAmount

Indica el monto menos propina.

VARCHAR()

37

transDate

Fecha , hora de la transacción, zona horaria (CDT o CST).

Ejemplo:
2022-06-13 16:24:24.CDT

NOMENCLATURA:
AAAA-MM-DD HH:MM:SS.ZONA HORARIA

DATETIME

38

transType

Indica el tipo de operación realizada. Venta (A), Cancelación (V).

VARCHAR2(5 BYTE)

39

transactionCertificate

Información sobre la lectura de la tarjeta.

VARCHAR2(50 BYTE)

40

transactionId

Id de la transacción.

VARCHAR2(36 BYTE)

41

traceability

Objeto para envío de información adicional.

OBJECT

📘

Notas.

1.- El campo "hexSign" Firma autógrafa, es un valor que contiene la firma digital del cliente codificada y es un valor de hasta (4000 bytes).
2.- El tipo de dato de los campos que se regresa en la respuesta puede ser String con un número de valor por lo que recomendamos que se realice la conversión a formato Int, Double o algún tipo de valor que se requiera.

🚧

Recuerda...

Para validar de forma correcta una transacción aprobada, verifica el atributo "responseCode", cualquier valor diferente de "00" representa una declinación.

8.4 Respuestas

Transacción exitosa

Ejemplo de una transacción exitosa sin NIP.

{
	"affiliation": "7389108",
	"applicationLabel": "BANCOMER VISA",
	"arqc": "FBC96F0EA205A95B",
	"aid": "A0000000032010",
	"amount": "0.01",
	"authCode": "123456",
	"bankName": "BANCOMER",
	"bin": "415231",
	"cardExpDate": "10/25",
	"cardType": "D",
	"cardTypeName": "VISA",
	"cityName": "Guadalupe NUEVO LEON",
	"responseCode": "00",
	"folioNumber": "123",
	"hasPin": true,
	"hexSign": "",
	"isQps": 0,
	"isRePrint": false,
	"message": "Transacción exitosa",
	"moduleCharge": "4",
	"moduleLote": "1",
	"customerName": "                          ",
	"terminalId": "1490293930",
	"orderId": "220614124921-1490293930",
	"preAuth": "0",
	"preStatus": 0,
	"promotion": "00",
	"rePrintDate": "1.3.6.p.p_20220610",
	"rePrintMark": "VISA",
	"reprintModule": "C",
	"cardNumber": "6008",
	"storeName": "CICAP",
	"streetName": "AVE PABLO LIVAS 7200",
	"ticketDate": "JUN. 14, 22 12:49:21 ",
	"tipAmount": "0.0",
	"tipLessAmount": "0.01",
	"traceability": {
		"idProducto": "123456",
		"idTienda": "0987"
	},
	"transDate": "2022-06-14 12:49:22.CDT",
	"transType": "A",
	"transactionCertificate": "03FB0FE5B40A3D4C",
	"transactionId": "49FB7BF3-155B-B75B-28F7-69EA73315D89"
}
{
	"affiliation": "7389108",
	"applicationLabel": "",
	"arqc": "7A0FDDB367015317",
	"aid": "A0000000032010",
	"amount": "0.01",
	"authCode": "123456",
	"bankName": "BANCOMER",
	"bin": "415231",
	"cardExpDate": "09/15",
	"cardType": "D",
	"cardTypeName": "VISA",
	"cityName": "Guadalupe NUEVO LEON",
	"responseCode": "00",
	"folioNumber": "123",
	"hasPin": false,
	"hexSign": "00000100000001DA0000009E000000040800031CFF02FF02D300A765326D39707D5A3CCB5961E1D71DCA05B51F6105B31A4DA470417D0B8480AA0CFF021A9C089445586C9C9324445E7E0853EC1A21AC35300A278A85E95C11505E905F19E9EB26BB4B2CCDC035B102CAFF0268B2BAB4B6C14678F3CD22C971838B1F9C5764B04FAEDFFD9D597E6F17C734C07DF5221378A650FF02FF02FF02FF02FF02EF97F1CFA33540FF029E96CCFF02CE7064FF0245A0FF0234B9DC693395D665BB52AD7CAE30E32E31B3B5F8CEACB02501FF00F662348A2CFF00EA4AFF00BD1BA5C475580886965CFF0220179D12A370E9AFDC57B017523C218B16308EBE30E7AFD0354A8119A0A171BC550A7770FF0284FA934D3A4B6F6473922BCC01A40EB789051D9B0EEE84F7349F7AFAAED84B0F0EB0E690CEBE90F340FF0273934340FF02016CAF95AAC780FF0256959BEDAC0BAED379D8BFC820FF026E36D24B941393DF7D371E48C0FF0265CA197B0B153A51ED998C5E40FF025E5CC73363EBE454FF02692E60FF02FF02ECB6E99E8EDD78A803BFA63614AD9D4AF447C40A81765964FDF23924F877F028C1E2FF00441F941B85C6451FC1712783A081FF023FBF77A751E732DE557AD09B32E395A55842BB2C9F5FFE07E28C8BAEA5BF4329593FD9A1EE46905C14AF507758FF023C054A8BAA0FAF527C6E3D87EFA8EBAF231E269851F6DDFF02FF02FF02FF02FF02FF02FF02FF02FF02FB0DA0AD9DB2A521A868781D07773FD4347668DE2A2077F8D30A00CCD7C049BA5976C2D61E9AFEEA0E4E27F7F1F00E921712BD4A2B3DD5D57AC0B68AEEF888FF026254547BA117D490C2335636E7916F49A76C4BA9813BB9BEE4CA03DAA4367FEAE838E09663F2061E59BF9EFF0235D7E19510000C70FF02FF02FF02",
	"isQps": 0,
	"isRePrint": false,
	"message": "Transacción exitosa",
	"moduleCharge": "1",
	"moduleLote": "1",
	"customerName": "                          ",
	"terminalId": "1490293930",
	"orderId": "220613160732-1490293930",
	"preAuth": "0",
	"preStatus": 0,
	"promotion": "00",
	"rePrintDate": "1.3.6.p.p_20220610",
	"rePrintMark": "VISA",
	"reprintModule": "C",
	"cardNumber": "0616",
	"storeName": "CICAP",
	"streetName": "AVE PABLO LIVAS 7200",
	"ticketDate": "JUN. 13, 22 16:07:32 ",
	"tipAmount": "0.0",
	"tipLessAmount": "0.01",
	"traceability": {
		"idProducto": "123456",
		"idTienda": "0987"
	},
	"transDate": "2022-06-13 16:07:33.CDT",
	"transType": "A",
	"transactionCertificate": "4965F31C3832197F",
	"transactionId": "945419D2-B5EE-55A8-9B9E-4EC76C314F82"
}
{
	"affiliation": "7389108",
	"applicationLabel": "VISA CREDITO",
	"arqc": "F1648A419561ED25",
	"aid": "A0000000031010",
	"amount": "1",
	"authCode": "222222",
	"bankName": "BANORTE",
	"bin": "",
	"cardExpDate": "01/21",
	"cardType": "C",
	"cardTypeName": "VISA",
	"cityName": "Guadalupe,NUEVO LEON",
	"responseCode": "00",
	"folioNumber": "1235",
	"hexSign": "00000100000001DA0000009E000000040800031CFF02FF02D3043B653263359F0AF79846FE503D29AFED727442B52244782286DA831EE8FF02289E30401A72299B0CFF006A849ED2C985BC47C6BE0506A5C1F7CA627C2C8EA39C3A84EE4A0D89F36138FF02075BA8846842C4588866931840DD512B7A16193699D76B63D6D348B05E8469DCFF02FF02FF02FF02FF02FF02D4BB2780FF0202B49CFF02845CFF022662E975F74CCAD8B498B36DCBFA94152C63BBB2E21FF0F72C3974DF7B32669E4FCB0E1D240E596EE1132C9EFEFF02005E71604847C92BF0D8D60071A5B63B99160DAF4239A40B47988EE516FCFF021B5A8E2CE96342E49BF2D7712C32868B797A18B38583A6A2717CC6132AFF005486EC5EDF1B11AD80FF025620FF023B90FF024CFF020DFF021380FF02C980FF0215FF024EFF02F0D7FD3D75E66A137FBD090581BBCCF304BDF9DFFED9FB1D47C3412F5ACF0499DD37C3EB3B780062B4FA74EB5C83532E221CFA9DC194153F6E548EFF025247B5AE6EAE339E3EE758C3D0871234AB7286F871FDE44099D18B8EC8FF024F0FC24435FB120E140C41A17DF990DED7F691CE2B4DA75A9E3830FF02FF000B80FF024DFF0206FF02FC6080FF02FF02FF02FF02FF02FF008AD016B3DABE23E8B9A740B3B4560822F62C040F510B7C5916D1DDD06565D5C70EB0737C10DE0CC7BA0385B566BAA560A641EFE2BF40C6190CFF02533D6F7718D9E905BC6F4DBA31B0BBE0EEF6DB728E749A1CDA3EC2D2084B8FB810B77720FF02431A72D9126620FF02FF02FF02",
	"internalNumber": "",
	"isQps": 0,
	"isRePrint": true,
	"message": "Transaccion Valida",
	"moduleCharge": "1",
	"moduleLote": "1",
	"customerName": "TREJO PECINA/AGUSTIN",
	"terminalId": "1490293930",
	"orderId": "210304142730-1490293930",
	"preAuth": "0",
	"preStatus": 0,
	"promotion": "0",
	"rePrintDate": "1.2.8_20210203",
	"rePrintMark": "VISA",
	"reprintModule": "C",
	"cardNumber": "8425",
	"storeName": "COMERCIALIZADORA DE MANGUERAS DE CHIHUAHUA SA DE CV",
	"streetName": "AVE PABLO LIVAS 7200",
	"tableId": "",
	"ticketDate": "MAR. 04, 21 14:27:31",
	"tipAmount": "0",
	"tipLessAmount": "0",
	"traceability": {},
	"transDate": "2021-03-04 14:27:30.0",
	"transType": "A",
	"transactionCertificate": "F1648A419561ED25"
}
{
	"affiliation": "7389108",
	"applicationLabel": "VISA CREDITO",
	"arqc": "F1648A419561ED25",
	"aid": "A0000000031010",
	"amount": "1.0",
	"authCode": "222222",
	"bankName": "BANORTE",
	"bin": "",
	"cardExpDate": "21/01",
	"cardType": "C",
	"cardTypeName": "VISA",
	"cityName": "Guadalupe NUEVO LEON",
	"responseCode": "00",
	"folioNumber": "1235",
	"hasPin": false,
	"hexSign": "",
	"isQps": 0,
	"isRePrint": false,
	"message": "Transacción exitosa",
	"moduleCharge": "2",
	"moduleLote": "1",
	"customerName": "TREJO PECINA/AGUSTIN",
	"terminalId": "1490293930",
	"orderId": "210304142730-1490293930",
	"preAuth": "0",
	"preStatus": 0,
	"promotion": "00",
	"rePrintDate": "1.2.8_20210203",
	"rePrintMark": "VISA",
	"reprintModule": "C",
	"cardNumber": "8425",
	"storeName": "COMERCIALIZADORA DE MANGUERAS DE CHIHUAHUA SA DE CV",
	"streetName": "AVE PABLO LIVAS 7200",
	"ticketDate": "MAR. 04, 21 14:27:31",
	"tipAmount": "null",
	"tipLessAmount": "1.0",
	"traceability": {},
	"transDate": "2021-03-04 14:32:22.CST",
	"transType": "V"
}

Cancelado por el Usuario / time out

En caso de enviar una solicitud a la terminal y esta sea cancelada desde la terminal o el tiempo de espera que es al rededor de 1 minuto se agote, se enviará el siguiente mensaje en formato JSON hacia el servicio de respuesta:

{
	"bin": "",
	"responseCode": "02",
	"folioNumber": "123",
	"internalNumber": "",
	"isRePrint": false,
	"message": "Cancelado por el Usuario",
	"tableId": "",
	"traceability": {}
}
386

Demo venta Cancelado por el usuario.

Promoción inválida para tipo de tarjeta

En caso de utilizar una tarjeta para cierto tipo de promoción, como por ejemplo meses sin intereses, y esta no soporte dicha promoción (por ejemplo una tarjeta de débito), se recibirá el siguiente mensaje en formato JSON:

{
    "bin": "",
    "responseCode": "05",
    "folioNumber": "123",
    "internalNumber": "",
    "isRePrint": false,
    "message": "PROMOCION NO VALIDA PARA EL TIPO DE TARJETA",
    "tableId": "",
    "traceability": {}
}

Otro tipo de respuestas

{ 
  "bin": "",
  "responseCode": "13",
  "folioNumber": "prueba",
  "isRePrint": false,
  "internalNumber": "",
  "message": "TRANSACCION NO PERMITIDA",
  "tableId": "",
  "traceability": {}
}
{
  "bin": "",
  "responseCode": "56",
  "folioNumber": "prueba",
  "isRePrint": false,
  "internalNumber": "",
  "message": "TARJETA INVALIDA",
  "tableId": "",
  "traceability": {}
}
{
  "bin": "",
  "responseCode": "34",
  "folioNumber": "prueba",
  "internalNumber": "",
  "isRePrint": false,
  "message": "TRANSACCION RECHAZADA",
  "tableId": "",
  "traceability": {}
}
{
  "bin": "",
  "responseCode": "05",
  "folioNumber": "prueba",
  "internalNumber": "",
  "isRePrint": false,
  "message": "Error de conexión",
  "tableId": "",
  "traceability": {}
}

Como se mencionó más arriba, se pueden obtener diferentes tipos de respuesta según el banco emisor de la tarjeta. Un responseCode diferente de 00 indica que la transacción no fue exitosa y podemos ver el motivo en el message.

8.5 Modelo de datos para manejo de errores

Cuando se provoca un error en la terminal y se produce un error se envía en formato JSON la respuesta de la operación al servicio de respuesta con un modelo de datos como se muestra en la siguiente tabla.

id

Nombre Campo

Descripción

Tipo de dato

1

bin

Primeros 6 digitos de la tarjeta.

VARCHAR2(6 BYTE)

2

responseCode

Código de respuesta en función del estatus de la transacción. El valor 00 representa una transacción exitosa, cualquier otro valor se puede tomar como un problema con la transacción.

VARCHAR2(2 BYTE)

3

folioNumber

Número identificador de transacción que puede ser enviado en la solicitud de venta.

VARCHAR2(250 BYTE)

4

internalNumber

Identificador interno.

VARCHAR2(250 BYTE)

5

isRePrint

Mensaje que indica si la transacción es un duplicado o una venta.

Venta:false
Reimpresion:true

false o true

6

message

Mensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo.

VARCHAR2(200 BYTE)

7

tableId

Identificador interno.

VARCHAR2(250 BYTE)

8

traceability

Objeto para envío de información adicional.

Object