Integración de aplicaciones de pago (Inter-App)

En el siguiente documento se especifica como hacer uso de la integración entre aplicaciones móviles para invocar la aplicación de Pagos con sus diferentes parámetros, así como la respuesta que la misma emitirá hacia la aplicación de origen.

Diagrama alto nivel de la integración

Intent

👍

Antes de comenzar

  • Para realizar pruebas debes contar con un terminal TUU, ya que la aplicación de Pagos está certificada para operar solo sobre ese modelo en específico.
  • SDK de Pagos.. Consideración importante, el nombre del package en develop es diferente al de producción:
    com.haulmer.paymentapp.dev y com.haulmer.paymentapp

Parámetros de entrada

{
	"amount": 10000,
	"tip": 0,
	"cashback": 0,
	"method": 2,
	"installmentsQuantity": 5,
	"printVoucherOnApp": true,
	"dteType": 48,
	"extraData": {
    	"taxIdnValidation": "8886274-2",
    	"exemptAmount": 9000,
    	"netAmount": 1000,
    	"sourceName": "Nombre App Integradora",
    	"sourceVersion": "2023.01.20-6",
    	"customFields": [
      	{
       		"name": "nombre",
         	"value": "valor",
         	"print": true,
        }
      ]
	}
}
ParámetroDescripciónValidación de dato
amountMonto de la transacción que será usado para cobrar al tarjeta habiente en la app de Pago.

amount = netAmount + exemptAmount

Nota: No incluye tip ni cashback ya que corresponde a un monto que no se debe declarar.
Su posible valor es cualquier monto superior a 0 que no sea de más de 12 dígitos.
tipMonto de la propina asociada a la transacción. Sus posibles valores son:

• -1 cuando no sea utilizado.
• 0 para ser solicitado en app de Pago.
• Monto mayor a 0.

Estas opciones consideran la configuración propia del Terminal para la gestión de la propina.
• Si ingresa 0 la app de Pago solo consultará por el monto si está habilitado en su configuración.
• Si se usa un valor mayor a 0 se procesará ignorando la configuración del dispositivo.
Puede ser -1, 0 o un número entero mayor a 0. Máximo 12 dígitos.
cashbackMonto del vuelto asociado a la transacción.
* Solo para venta en débito. *

Opciones:
• -1 cuando no sea utilizado.
• 0 para ser solicitado en app de Pago.
• Monto mayor a 0.

La opción 0 solo se considerará cuando la configuración del Terminal tenga habilitado el vuelto.
Puede ser -1, 0 o un número entero mayor a 0. Máximo 12 dígitos.

Parámetros de salida

{
	"transactionStatus": true,
	"sequenceNumber": "000000004719",
	"printerVoucherCommerce": true,
        "transactionTip": ,
	"extraData": {
		...
	}
}
CampoDescripción
transactionStatusInforma sobre el estado de la transacción. Sus posibles valores son true si es que la transacción termino correctamente o false en caso contrario.
sequenceNumberCorrespondiente al número único de la transacción el cual sirve como identificador. Su posible valor es una cadena de texto representando un número de 12 dígitos.
printerVoucherCommerceIndica si la opción de impresión automática del comprobante para el comercio dentro del dispositivo está activa. Sus posible valores son true si esta configurado que se imprima automáticamente el voucher de comercio, false si no está configurado.
extraDataRetorna el objeto completo extraData ingresado como parámetros de entrada.
transactionTipRetorna la propina
transactionCashbackRetorna el vuelto, esto es dependiente del valor printVoucherOnApp

Manejo de errores

Cuando exista algún error, ya sea con la validación de los parámetros de entrada o del lado del servidor, se retornará un JSON con la siguiente estructura a la app.

{
	"errorCode": 1,
	"errorMessage": "La app de pago no soporta propina de acuerdo a sus configuraciones.",
	"errorCodeOnApp": 500,
	"errorMessageOnApp": "Internal Server Error"
}

El significado de los campos es el siguiente:

CampoDescripciónExistencia
errorCodeCódigo de error ocurrido. Ver tabla Errores conocidos.Siempre.
errorMessageDescripción del error. Ver tabla Errores conocidos.Siempre.
errorCodeOnAppCódigo de error recibido desde el servidor.Solo cuando es error del servidor.
errorMessageOnAppMensaje de error recibido desde el servidor.Solo cuando es error del servidor.

Tabla de errores conocidos

CódigoMensajeDescripción
1La app de Pago no soporta propina de acuerdo a sus configuraciones.
2La app de Pago no soporta vuelto de acuerdo a sus configuraciones.Si el JSON recibido tiene un valor mayor a 0 en el atributo cashback y el Terminal tiene desactivada la opción de vuelto en su configuración establecida en su espacio de trabajo.
3El método de pago no esta definido en las configuraciones.El atributo method del JSON recibido en la aplicación no tiene un valor válido.
4El dispositivo no admite cuotas en este tipo de transacción.Si installmentsQuantity tiene un valor superior a -1 cuando el método seleccionado no sea crédito.
5El dispositivo no admite vuelto en este tipo de transacción.Cuando cashback tenga un valor superior a -1 y el método de transacción elegido no sea débito.
6El monto no fue especificado.En caso que el atributo amount tenga un valor inferior a 0 en el JSON recibido o no viene especificado.
7El monto excede el máximo permitido.En caso de que el atributo amount tenga un valor superior al límite establecido en las configuraciones del Terminal.
8No todos los atributos requeridos están presentes.En caso de que algún atributo no haya sido añadido en el JSON.
9Error en proceso de pago.Error ocurrido durante el proceso de pago en la aplicación.
10La transacción fue cancelada.En caso de que durante el proceso de la transacción esta haya sido cancelada por el usuario.
11El Terminal no esta correctamente configurado.El Terminal aun no ha sido correctamente configurado, esto puede deberse a que aún no ha sido agregado y activado en el espacio de trabajo del usuario, o que el dispositivo no haya sido aprobado desde Backoffice para su uso, o que el dispositivo haya sido previamente deshabilitado.
12El dispositivo esta aprobado pero no se han cargado las llaves, favor de abrir la aplicación de pago realizar la inyección de llaves.El Terminal fue aprobado a través de los ejecutivos de Back Office, sin embargo aún no ha podido descargar y almacenar los certificados y llaves necesarias para su correcto funcionamiento. Es necesario abrir la aplicación para que se lleve a cabo este procedimiento y posteriormente poder hacer uso de la aplicación.
13El dispositivo no admite un moto de más de 12 dígitos.El atributo amount que fue enviado excede el límite de 12 dígitos establecido para el correcto funcionamiento de la aplicación.
14El dispositivo no esta conectado a internet.El Terminal actualmente no esta conectado a alguna red o la red a la cual esta conectado no presenta salida a internet, por lo tanto no es posible cargar las configuraciones.
15El dispositivo no pudo obtener la configuración desde su cuenta.El Terminal está conectado a internet, sin embargo no se pudo establecer conexión con la cuenta de pago correctamente.
16El rubro esta en espera de asignación, prontamente podrá ser utilizado.El canal de pago asociado al POS aun espera su asignación.
17El rubro utilizado tuvo un error durante la asignación.El canal de pago asociado al Terminal experimentó algún error durante su asignación.
18El tipo de documento electrónico no esta definido en las configuraciones.En caso de que el atributo dteType traiga un valor que no esta registrado como un tipo válido.
19El RUT indicado no coincide con el utilizado.Ocurre cuando se envía un RUT en el campo de validación y este no coincide con el utilizado para habilitar la aplicación de Pagos
20El SDK de Pagos no se encuentra instalado.Ocurre cuando el SDK “SunmiPayHardwareService“ no esta instalado o en su defecto no cuenta con una versión igual o superior a 3.3.96.
21La aplicación de Pago necesita ser actualizada.Ocurre cuando la aplicación de pagos rechaza el intent ya que necesita ser actualizada.
I-01Problemas al procesar campos requeridos.Si no declara en cada uno de sus customFields “name” o “value“.
I-02Los campos superan el máximo de caracteres.Si supera el máximo numero de caracteres por cada Customfield.
I-03Formato no valido. Posee carácteres reservados del sistema.Si se incluye los caracteres reservados “&“ y “/“, en alguno de sus Customfield.
I-04Los campos ingresados no son validos.Si se ingresan caracteres en blanco tanto como en el "name" o "value".

Modelo de emisión (S.I.I.)

Ver Comprobante de pago y modelo de emisión.

ChangeLog

Versión 1.3.20221020.0848 [02/11/2022]:

  • El campo transactionTip es retornado independiente del valor asociado a printVoucherOnApp.