QR dinámico

Diagrama de estado del QR dinámico

  • Pendiente: Es el estado inicial de un QR.
  • Eliminado: Solo se puede eliminar un QR si el mismo se encuentra en estado “Pendiente”. Bajo determinados casos especiales puede ocurrir por excepción que un QR “Eliminado” pase a “Pagado”
  • Pagado: Si un QR se encuentra en estado “Pendiente”, puede pasar a “pagado”. Lo cual este puede ser devuelto.
  • Devuelto: Se puede devolver un QR solo si se encuentra en estado “pagado”.

Generación de un QR dinámico

Contenido del QR

Los datos a cambiar son sólo aquellos que se encuentran entre dos pares de llaves (incluyendo las mismas) y las “XX” y “ZZ”.

JSON
Copy

¿Cómo interpretar correctamente un QR String?

El QR String no tiene una longitud máxima fija, pero debe cumplir con el estándar EMVCo Merchant Presented Code, en el cual ciertos atributos tienen un límite de longitud.

Para interpretar correctamente la estructura del QR String, se deben tener en cuenta los siguientes elementos:

Ejemplo simple: 00 02 01

  • La primera columna de 2 dígitos “00” corresponden a la posición.
  • La segunda columna de 2 dígitos “02” corresponden a la longitud del valor.
  • La tercera columna “01” es el valor asociado a la posición.

Ejemplo con sub-matriz:

43 37

00 12 com.pagos360

98 11 30714100803

99 02 01

  • La primera columna de 2 dígitos “43” corresponde a la posición.
  • La segunda columna de 2 dígitos “37” corresponde a la longitud de la sub-matriz que sigue.
  • La tercera columna contiene una sub-matriz con diferentes niveles, donde:
    1. La primera columna de 2 dígitos “00” corresponde a la posición dentro de la sub-matriz.
    2. La segunda columna de 2 dígitos “12” corresponde a la longitud del valor de la sub-matriz.
    3. La tercera columna “com.pagos360” es el valor asociado a esa posición dentro de la sub-matriz.
DataDescripciónObservaciones
00 02 01Indicador de formato.Constante.
01 02 11Punto del método de iniciación.Constante.

43 37

00 12 com.pagos360

98 11 30714100803

99 02 01

Identificador de PAGOS360.Constante.

50 15

00 11 {{ CUIT }}

CUIT de la compañía.

Numérico.

Siempre debe ser de 11 dígitos.

52 04 {{ CATEGORY_CODE }}Código de categoría de la compañía.Constante. Numérico. Debe ser de 4 dígitos
53 03 032Código de la moneda.Constante.
58 02 ARCódigo del país.Constante.
59 XX {{ COMPANY_NAME }}Largo y nombre de la compañía.

El largo debe ser de dos dígitos.

El nombre debe ser del largo que indica anteriormente, hasta 25 carácteres.

60 XX

{{ CITY }}

Largo y nombre de la ciudad.

(El nombre DEBE estar en mayúsculas.)

El largo debe ser de dos dígitos.

El nombre debe ser del largo que indica la variable anterior, hasta 15 carácteres.

61 08 {{POSTAL_CODE}}Es el código postal de la empresa. En este caso utilizamos el CPALa cantidad máxima y mínima es de 8 caracteres. El valor constante debe ser X5009KHC

62 XX

01 ZZ {{ QR_ID }}

ID único del QR y su largo.

ZZ corresponde al largo del QR_ID.

XX = ZZ + 4 (suma numérica)

El ID del QR debe contener el ID de la cuenta del negocio, en su caso, valor constante igual a 454133B2 seguido de un “-” y el identificador a su elección.

El tamaño total no debe superar los 25 caracteres. Luego de la constante “454133B2-” se debe concatenar un id que como máximo tenga 16 caracteres.

El mismo puede estar conformado por números y letras

63 04

{{ CHECKSUM }}

Checksum (CRC) para validar la integridad del string.

Alfanumérico.

Siempre debe ser de 4 carácteres.

¿Qué es el CRC / checksum?

La verificación por redundancia cíclica​ (CRC) es un código de detección de errores usado frecuentemente en redes digitales y en dispositivos de almacenamiento para detectar cambios accidentales en los datos.

¿Cómo se calcula?

El checksum se debe calcular conforme al estándar [ISO/IEC 13239] usando el polinomio '1021' (hex) y el valor inicial 'FFFF' (hex).

Los datos que se deben incluir en el armado del checksum abarcan a todos los objetos que se incluirán en el Código QR, en su orden respectivo, así como el ID y longitud del propio CRC (pero excluyendo su valor).

Ejemplo en javascript

Javascript
Copy

Links de utilidad:

https://crccalc.com/

https://es.wikipedia.org/wiki/Verificaci%C3%B3n_de_redundancia_c%C3%ADclica

Type to search, ESC to discard
Type to search, ESC to discard
Type to search, ESC to discard