Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Digital Factory
Proyecto QR Payments
Versión 1.4.2
Confidencial Niubiz:
Tabla de Contenido
1. PREFACIO ............................................................................................... 4
1.1. ACERCA DEL DOCUMENTO ............................................................................................... 4
1.2. HISTORIA DE CAMBIOS ..................................................................................................... 4
1.3. APROBACIONES .............................................................................................................. 4
1.4. DISTRIBUCIÓN ................................................................................................................. 4
1.5. REVISORES .................................................................................................................... 4
2. INTRODUCCIÓN ......................................................................................6
2.1. PROPÓSITO .................................................................................................................... 6
2.2. ALCANCE........................................................................................................................ 6
2.3. PÚBLICO OBJETIVO .......................................................................................................... 6
2.4. DOCUMENTOS RELACIONADOS ......................................................................................... 6
3. DESCRIPCIÓN DE LA SOLUCIÓN ......................................................... 7
3.1. DIAGRAMA TÉCNICO ........................................................................................................ 8
4. PASOS PARA INTEGRARME ............................................................... 10
5. INTEGRACIÓN API SECURITY ............................................................. 12
6. DIAGRAMAS DE LA SOLUCIÓN .......................................................... 13
6.1. DIAGRAMAS DE SECUENCIA – GENERACIÓN DE QR SIMPLE .............................................. 13
6.2. DIAGRAMAS DE SECUENCIA – GENERACIÓN DE QR BATCH............................................... 14
7. INTEGRACIÓN API QR MANAGER ...................................................... 15
7.1. DETALLE DEL SERVICIO GENERADOR DE QRS SIMPLE ...................................................... 15
7.2. EJEMPLO DE TRAMA QR ESTÁTICO ................................................................................. 16
7.3. EJEMPLO DE TRAMA QR DINÁMICO ................................................................................. 18
7.4. EJEMPLO DE FORMATO TLV EMVCO ............................................................................. 20
8. INTEGRACIÓN API QR BATCH ............................................................ 21
8.1. DETALLE DEL SERVICIO GENERADOR DE QRS BATCH ...................................................... 21
8.2. DETALLE DEL SERVICIO STATUS QRS BATCH .................................................................. 22
8.3. FORMATO DE ARCHIVOS BATCH ...................................................................................... 23
8.4. EJEMPLO TRAMA DE ENVÍO DE BATCH QR ...................................................................... 24
8.5. CONSULTA STATUS DE BATCH QR ................................................................................. 24
8.6. DICCIONARIO DE ERRORES ............................................................................................ 24
9. INTEGRACIÓN API RSCA CALLBACK ................................................ 25
9.1. FLUJO DE CALLBACK ..................................................................................................... 25
9.2. EJEMPLO DE TRAMA RSCA............................................................................................ 26
10. INTEGRACIÓN APIS CONSULTA TRANSACCIONES ......................... 27
10.1. DETALLE DEL SERVICIO DE OBTENER TRANSACCIÓN .................................................... 27
10.2. EJEMPLO DE LA TRAMA A ENVIAR ............................................................................... 28
10.3. DETALLE DEL SERVICIO DE CONSULTAR TRANSACCIONES POR FECHA ........................... 29
10.4. EJEMPLO DE LA TRAMA A ENVIAR ............................................................................... 30
11. INTEGRACIÓN API VOID ...................................................................... 31
11.1. DETALLE DEL SERVICIO DE ANULACIÓN DE TRANSACCIÓN ............................................ 31
11.2. EJEMPLO DE LA TRAMA A ENVIAR ............................................................................... 32
Este documento especifica en detalle los componentes y su interacción para la implementación de requerimien-
tos con metodología Agile.
1.3. Aprobaciones
La versión consolidada de este documento será incluida en el repositorio del proyecto en la herramienta interna
de Niubiz. Las aprobaciones son documentadas vía la distribución del documento y la firma de los aprobadores.
1.4. Distribución
Nombre Rol
1.5. Revisores
2.2. Alcance
¿Cómo funciona?
1. QR Estático: puede recibir “n” pagos con el mismo QR y tiene un periodo de Vigencia extendida.
Este puede ser aplicado a puntos de ventas físico cuando el QR es impreso.
2. QR Dinámico: puede recibir un sólo pago y queda desactivado una vez hecho el pago.
Es aplicado cuando el QR está impreso en un recibo o boleta o corresponde únicamente a un pro-
ducto. Por ejemplo: Recibo de servicios, Boleta de Pagos.
El comercio puede tener QRs físicos que pueden ser los parante o fotocheck que son QR estáticos y son asig-
nados directamente al comercio para su punto físico una vez afiliado, los pagos realizados a este QR serán
recibidos únicamente al aplicativo QR Niubiz que podrán descargarlo desde PlayStore (Android) o AppStore
(iOS) e ingresarán al mismo con el usuario asignado.
1. Todo Comercio el cual requiera generar códigos QR como medio de pago adicional deberá estar registrado
previamente dentro del QR Directory; es decir, debe solicitar a Niubiz un Código de Comercio QR.
Una vez registrado podrá realizar la generación de los códigos QR ya sea de forma integrada a su sistema
(QR Dinámico) o puntualmente un solo QR en su punto de venta (QR Estático)
Para el caso de un Bill Payments la generación debe ser por Batch.
2. Si el comercio se encuentra integrado a las APIs para la generación de los QR, deberá disponibilizar un
servicio Callback para recibir las notificaciones de Pago de los QR Dinámicos, caso contrario podrá descar-
gar el aplicativo Niubiz QR donde podrá visualizar los pagos realizados a su parante (QR Estático).
3. Las Billeteras podrán escanear los QRs Estáticos o Dinámicos para poder iniciar el Pago QR,
4. Seleccionarán la tarjeta de su banco ya sea crédito o débito donde se les hará el cargo por la compra.
5. Las billeteras una vez validado el saldo de la tarjeta y junto al QR escaneado procederá a generar la trama
para enviarlo al banco o al adquiriente que se encuentre integrado.
6. Las Billeteras enviarán una petición de autorización de la transacción a Niubiz a través del componente
“Authorization HUB”
QR Integrado: Dirigido a comercio que requieran generar sus QRs en línea para la venta de su producto o
servicio a través del pago con Billetera Electrónica
Paso 1 Credenciales
Deberá generar tokens a través del API Security del punto 5 para el uso de todas las APIs de QR,
las credenciales para integrarse están en la misma sección, en el ambiente productivo deberá
proporcionar un correo custodio para las credenciales de las APIs a donde se les enviará de ma-
nera anónima.
Paso 2 Generar QRs
Deberá generar los QRs Dinámicos en línea a través del servicio de la sección 7.1, para esto utili-
zará el codigo de comercio 438933213 para la integración.
En producción en necesario la generación de un nuevo código de comercio luego de la afiliación.
Para los QRs en línea tener en cuenta que deberán tener una fecha de vencimiento como mínimo
posterior al día de su generación.
El QR devuelto es en formato base64 por lo que podrá ajustar el tamaño de este dependiendo el
contenedor donde este embebido.
Paso 3 Notificación de Pago
Una vez generado los QRs y al hacer un pago este será notificado vía Callback al servicio (URL)
que proporcione el comercio de manera automática con el formato de trama indicado en la sec-
ción 9.2, quedando en responsabilidad del comercio interpretar los campos para conciliar.
El comercio deberá proporcionar un correo de derivar las notificaciones de error en caso el servi-
cio empiece a reportar inconvenientes para tomar acciones inmediatas.
El comercio tendrá la responsabilidad de restringir las IPs de los ambientes correspondientes.
Desarrollo:
35.153.17.226
Producción:
52.207.94.42 / 52.54.136.111 / 18.232.138.252 / 3.86.214.217
Todos los pagos son liquidados a las 12:00 pm, posterior a ello no se podrá anular la transacción
y pasará a un flujo de devolución regular.
Paso 4 Anulación
Únicamente se podrán anular las transacciones notificadas via Callback según el detalle del ser-
vicio de la sección 11
Paso 5 Simular Pagos
El comercio podrá simular Pagos al QR generado a través de nuestra demo en el link siguiente:
https://soporteqa.vnportalqr.com.pe/qrdemo/
Todos los pagos son liquidados a las 12:00 pm, posterior a ello no se podrá anular la transacción
y pasará a un flujo de devolución regular.
Paso 6 Anulación
Únicamente se podrán anular las transacciones notificadas via Callback según el detalle del ser-
vicio de la sección 11
URLs Servicios
QA https://apitestenv.vnforapps.com/api.security/v1/security
PROD https://apiprod.vnforapps.com/api.security/v1/security
Método: GET
AUTHORIZATION
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
Usuario asignado para la ge-
1 N/A username Alfanumérico Si Solicitar a VNT
neración de tokens
contraseña asignada para la
2 N/A Password Alfanumérico Si Solicitar a VNT
generación de tokens
RESPONSE
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
Token para el consumo de los servicios siguien-
1 N/A String Si
tes
Usrtest: integraciones.visanet@necomplus.com
Password: d5e7nk$M
PROD https://apiprod.vnforapps.com/api.qr.manager/v1/qr/ascii
Método: POST
HEADERS
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
1 N/A Content-Type String Tipo de encoding del Request Si
2 N/A Authorization String Token generado por el api.security Si
REQUEST
Fila Entidad Nombre del Campo Tipo Descripción Mandatorio Valor
1 N/A Boolean String estado de QR Si true
Utilizar el codigo de co-
mercio 438933213 en
Código de comercio NIUBIZ
3 param merchantId String Si QA
asignado
Código asignado por
Niubiz en producción
En el caso de Payment
Facilitator con un solo
código de comercio, po-
4 param merchantName String Nombre del comercio No drá cambiar el nombre
de comercio depen-
diendo su comercio afi-
liado.
Opcional dependiendo
5 param mcc String Código MCC Internacional No
el PF
código de moneda de afilia- 604 Soles
6 param transactionCurrency String Si
ción 840 Dólares
(*) Solo cuando el tipo
7 param transactionAmount String importe de la transacción No
de QR es DYNAMIC
Información adicional
param additionalData String Data adicional No para la notificación de
pago
STATIC
8 N/A tagType String tipo de QR Si
DYNAMIC
9 N/A validityDate String fecha de vencimiento Si Formato ddmmyyyyy
Request
{ "enabled": true,
"param": [
{
"name": "merchantId",
"value": " 438933213"
}, {
"name": "transactionCurrency",
"value": "604"
}
],
"tagType": "STATIC",
"validityDate": "17122019"
}
Response
{
"codeResponse": 0,
"message": "Exito",
"tagId": "67adc6875aec44cb9485a636042e6438",
Imagen QR ASCII
Request
{
"enabled": true,
"param": [
{
"name": "merchantId",
"value": "438933213"
},
{
"name": "transactionCurrency",
"value": "604"
},
{
"name": "transactionAmount",
"value": "20.20"
},
{
"name": "additionalData",
"value": “12312"
},
{
"name": "idc",
"value": “995500"
}
],
"tagType": "DYNAMIC",
"validityDate": "31122020"
}
Response
{
"codeResponse": 0,
"message": "Exito",
"tagId": "de077968cc394f318bd29daad08cba4b",
0002
01
0102
11
0216
40***********261
0416
50***********261
2636
0032c455512a6bd946fb8c6ef42dc386e57b
5204
5499
5303
604
5802
PE
5920
UNIVERSE NUTRITION D
6004
LIMA
6304
482E
URLs Servicios
QA https://apitestenv.vnforapps.com/api.qr.batch/qr/batch
PROD https://provisioning.vnmpos.com/api.qr.batch/qr/batch
Método: POST
HEADERS
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
1 N/A Content-Type String Tipo de encoding del Request Si
2 N/A Authorization String Token generado por el api.security Si
REQUEST
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
Archivo recibido en formato .zip
1 file String Si
codificado en Base64
Valor en ambiente de pruebas: 100
2 origin String Parámetro asignado por Niubiz Si Valor en producción es asignado por
el equipo de integración de Niubiz
Valor en ambiente de pruebas:
438933213
3 merchant String Parámetro asignado por Niubiz Si
Valor en producción será el asignado
por su funcionario.
Número de registro que viajan
4 rows String Si
en el archivo dentro del zip
No debe contener la extensión del ar-
nombre del archivo interno chivo, tener en cuenta que el nombre
5 nameFileProcess String Si
zipeado y la extensión debe respetar el Camel-
Case del archivo original
RESPONSE
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
1 statusCode String Token para el consumo de los servicios siguientes Si
Id generado del proceso recibido para la generación del
2 idProcess String Si
Batch
3 description String Successful Si
PROD https://provisioning.vnmpos.com/api.qr.batch/qr/fileStatus
Método: POST
HEADERS
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
1 N/A Content-Type String Tipo de encoding del Request Si
2 N/A Authorization String Token generado por el api.security Si
REQUEST
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
Identificador del proceso Batch
1 idProcess String Si
ejecutado
False: para retorna el estado de la
ejecución sin traer el archivo
2 status String Parámetro asignado por Niubiz Si True: para retorna el estado de la eje-
cución pero retorna el archivo el for-
mato .zip encoding Base64
RESPONSE
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
Token para el consumo de los ser-
1 statusCode String Si 0
vicios siguientes
2 description String Descripción de la ejecución Si Archivo procesado correctamente
3 idProcess String Identificador del proceso Si
DONE
4 status String Estado de la ejecución Si PENDING
FORMAT ERROR
5 merchant String Código de comercio Si
Archivo en formato zip con encoding
6 fileResponse String Archivo en base64 No
Base64
Nombre del archivo original que
7 nameFileProcess String Si
viene en el zip
• Archivo OUTBOUND maneja las siguientes posiciones y es retornado dentro de un zip en formato TXT
• Retorna con el formato de nombre OUTBOUND{{ddmmyyyyhhii}}
Request
{
"idProcess": "8a21a7fe-8072-4110-84ad-a2a2ec3bd815",
"status":"true"
}
Response
{
"statusCode": "0",
"description": "Archivo procesado correctamente",
"idProcess": "8a21a7fe-8072-4110-84ad-a2a2ec3bd815",
"status": "DONE",
"merchant": "438933213",
"fileResponse": "{{file}}”
"nameFileProcess": "INBOUND_438933213_260520200845"
}
• Niubiz se encargará de dar de alta el nuevo flujo Callback del comercio para el codigo de comercio QR
en producción.
Producción:
52.207.94.42 / 52.54.136.111 / 18.232.138.252 / 3.86.214.217
RESPONSE
Fila Entidad Nombre del Campo Oblig. Tipo Descripcion
1 N/A purchaseNumber Si String [10] Identificador de la billetera electrónica
Si Decimal
2 N/A transactionAmount Monto de la transacción
[10,2]
3 N/A transactionCountry No String[2] tiempo de procesamiento
4 N/A transactionCurrency Si String [3] Codigo de la moneda: 604 / 840
5 N/A authorizationCode Si String [6] Código de autorización del banco
NOTA: Niubiz puede agregar campos adicionales a la trama ya definida en un futuro según la necesidad
del producto, el comercio debe contemplar en su desarrollo interpretar sólo los campos que crea con-
veniente, para evitar incidentes más adelante.
PROD https://apiprod.vnforapps.com/api.qr.manager/v1/qr/queryTransaction/{transactionIdCore}
Método: GET
Postman: https://www.getpostman.com/collections/49517f16d903ce66556a
HEADERS
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
1 N/A Content-Type String Tipo de encoding del Request Si
2 N/A Authorization String Token generado por el api.security Si
REQUEST
Fila Nombre del Campo Tipo Descripción Mandatorio Valor
Este campo es el obtenido del campo
1 transactionIdCore String Identificador de la transacción Si transactionIdCore del servicio Call-
back integrado en el punto 8
RESPONSE
Fila Nombre del Campo Tipo Descripción Mandatorio Valor
1 transactionId String Identificador de la transacción Si
2 tagId String Identificador del QR procesado Si
3 merchantId String Código del comercio Si
4 broker String Usuario interno del QR No
Dispositivo desde donde se realiza
5 device String No
la modificación del QR
6 amount String Monto de Pago Si
7 operationNumber String Código de autorización del emisor Si
Numero de operación generado
8 purchaseNumber String Si
por la billetera
9 cardNumber String Tarjeta enmascarada Si
https://apitestenv.vnforapps.com/api.qr.manager/v1/qr/queryTransaction/62dca019-0d3c-4819-a3fb-9a0bf2078c6d
Response
{
"codeResponse": 0,
"transactions": {
"transactionId": "62dca019-0d3c-4819-a3fb-9a0bf2078c6d",
"tagId": "0e00452b193b4bb8826f2af287a79d46",
"merchantId": "438933213",
"broker": "USERQRPRD",
"device": null,
"amount": "190.00",
"operationNumber": "173850",
"purchaseNumber": 501000030,
"cardNumber": "455147******5511",
"cardType": null,
"fechaHoraTransaction": "2019-10-21 17:56:48.0",
"fechaHoraVoid": null,
"fechaHoraClosing": null,
"status": "TP",
"flow": "VISANET",
"currency": "0604"
},
"description": "Successful"
}
URLs Servicios
QA https://apitestenv.vnforapps.com/api.qr.manager/v1/qr/transactionQuery/{CodigoComercio}
PROD https://apiprod.vnforapps.com/api.qr.manager/v1/qr/transactionQuery/{CodigoComercio}
Método: POST
HEADERS
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
1 N/A Content-Type String Tipo de encoding del Request Si
2 N/A Authorization String Token generado por el api.security Si
REQUEST
Fila Nombre del Campo Tipo Descripción Mandatorio Valor
1 fechaInicio String Fecha de inicio de la transacción Si Formato: yyyy-mm-dd
2 fechaFin String Fecha fin de la transacción Si Formato: yyyy-mm-dd
RESPONSE
Fila Nombre del Campo Tipo Descripción Mandatorio Valor
1 transactionId String Identificador de la transacción Si
2 tagId String Identificador del QR procesado Si
3 merchantId String Código del comercio Si
4 broker String Usuario interno del QR No
Dispositivo desde donde se realiza
5 device String No
la modificación del QR
6 amount String Monto de Pago Si
7 operationNumber String Código de autorización del emisor Si
Numero de operación generado
8 purchaseNumber String Si
por la billetera
9 cardNumber String Tarjeta enmascarada Si
9 cardType String Marca No
10 fechaHoraTransaction String Fecha y hora de Pago Si Formato: 2019-10-21 17:56:48.0
11 fechaHoraVoid String Fecha y hora de la anulación No
12 fechaHoraClosing String Fecha y hora del cierre No
13 status String Estado de Pago No TP = Transacción procesada
https://apitestenv.vnforapps.com/api.qr.manager/v1/qr/transactionQuery/438933213
{
"fechaInicio": "2019-10-21",
"fechaFin": "2019-10-21"
}
Response
{
"codeResponse": 0,
"transactions": [
{
"transactionId": "62dca019-0d3c-4819-a3fb-9a0bf2078c6d",
"tagId": "0e00452b193b4bb8826f2af287a79d46",
"merchantId": "438933213",
"broker": "USERQRPRD",
"device": null,
"amount": "190.00",
"operationNumber": "173850",
"purchaseNumber": 501000030,
"cardNumber": "455147******5511",
"cardType": null,
"fechaHoraTransaction": "2019-10-21 17:56:48.0",
"fechaHoraVoid": null,
"fechaHoraClosing": null,
"status": "TP",
"flow": "VISANET",
"currency": "0604"
}, {
"transactionId": "d59c7654-3835-4d91-8cf3-6bfac09e6a1d",
"tagId": "53710953aac34c4e9d7fca0ec21cea6b",
"merchantId": "438933213",
"broker": "USERQRPRD",
"device": null,
"amount": "200.00",
"operationNumber": "161527",
"purchaseNumber": 508000325,
"cardNumber": "455787******5224",
"cardType": null,
"fechaHoraTransaction": "2019-10-21 16:33:38.0",
"fechaHoraVoid": null,
"fechaHoraClosing": null,
"status": "TP",
"flow": "VISANET",
"currency": "0604"
}
],
"description": "Successful"
}
PROD https://apiprod.vnforapps.com/api.qr.manager/v1/qr/void
Método: POST
HEADERS
Nombre del
Tipo Descripción Mandatorio Valor
Fila Entidad Campo
1 N/A Content-Type String Tipo de encoding del Request Si
2 N/A Authorization String Token generado por el api.security Si
REQUEST
Fila Nombre del Campo Tipo Descripción Mandatorio Valor
Este campo es el obtenido del campo
1 transactionId String Identificador de la transacción Si transactionIdCore del servicio Call-
back integrado en el punto 8
Indicador externo desde donde
2 externalTransactionId String se hace la invocación de la Si Identificador del sistema origen
transacción
comment String Motivo de la anulación Si
RESPONSE
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
1 codeResponse String Código de respuesta Si 0
2 httpCode String Código de respuesta http Si 200
3 description String Descripción de la ejecución Si Successful
"transactionId": "39b31b02-3530-4a66-a6ae-48c392802fa4",
"externalTransactionId": "2985698556",
"comment":"TEST"
}
Response
{
"codeResponse": 0,
"httpCode": 200,
"description": "Successful"
REQUEST
Fila Nombre del Campo Tipo Descripción Req Valor
1 transactionAmount String [10] Monto del QR Si
2 transactionCurrency String [100] Codigo de la moneda Si
3 tagId String [100] Identificador único del QR Si
Identificador único del cliente enviado en el
archivo Batch para el caso de Billpayments
en la posición 2
{
"name": "idc",
"value": "1123"
}
Datos adicionales enviado en el campo
“additionalData” al crear el QR en línea.
5 dataMap Object Si
Datos adicionales enviado en la Posición 6
al crear el QR en Batch
Body
Nombre del
Tipo Descripción Mandatorio Valor
Fila Campo
1 codeResponse String Codigo de respuesta Si 0000=Pendiente de pago
2 messageResponse String Mensaje de respuesta Si 0001=Pagado
Descripcion en caso error al
3 descriptionError String No
momento de la recepción
Request
{
"transactionAmount": "15.3",
"transactionCurrency": "604",
"tagId": "fd8eb3c799ee4ed4b369d19df777f38a",
"idc": "995555",
"dataMap": {
"campo1": "valor1",
"campo2": "valor2",
"campo3": "valor3",
Response
{
"codeResponse": “0000”,
"descriptionError": ""