Smart SDK.

Los pasos, para integrar tu aplicación de Android con el SDK de NetPay, se detallan a continuación:

1. Añadir repositorio necesario.

La implementación del SDK es mediante JitPack el cual nos ayuda a incluir repositorios remotos a nuestro proyecto.

El primer paso es añadir Maven Jitpack a la lista de repositorios en el fichero raíz gradle (Project).

774
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

2. Añadir la información de la dependencia.

El siguiente paso es añadir la información de la dependencia que se quiere incluir en la aplicación en el fichero gradle (Module: app).

1048

📘

Nota

Puedes revisar las últimas versiones liberadas directamente desde Jitpack la versión mas actualizada es la 1.1.8.

Ejemplo de cómo añadir la dependencia con la versión V1.1.8 es la siguiente.

dependencies {
    implementation 'com.gitlab.netpaymx.netpay-sdks:smart-sdk:V1.1.8'
}

Demo SDK.

📘

Nota

Para cualquier duda se anexa la liga del drive donde se encuentra el ejemplo del Demo SDK en el siguiente enlace https://drive.google.com/drive/folders/1nSUJ5yl8afwnyO4_LlmW-IjS4Sk0iOof para su descarga.
Este enlace incluye:

  • APK listo para instalar "DemoSDK-Oficial.apk".
  • Carpeta .zip con el proyecto Demo "DemoSDK-2023.zip".
1127

Demo SDK.

3. Importar dependencias.

Se deben importar las siguientes dependencias a tu archivo .java o .kt donde se utilizarán las operativas de venta.

import mx.com.netpay.sdk.SmartApiFactory
import mx.com.netpay.sdk.exceptions.SmartApiException
import mx.com.netpay.sdk.models.*

4. Inicializar el SDK.

Debes inicializar el SDK para poder hacer uso de todas las funcionalidades disponibles llamando al método createSmartApi().

En este ejemplo creamos una constante llamada smartApi y le asignamos el valor devuelto.

private val smartApi = SmartApiFactory.createSmartApi(this)
private SmartApi smartApi = SmartApiFactory.INSTANCE.createSmartApi(this);

5. Crear objeto SaleRequest para una venta.

Se debe crear una instancia de la clase SaleRequest que puede recibir los siguientes parámetros:

Parámetro.Tipo de parámetro.Descripción.Restricciones.
appIdStringNombre del paquete de la aplicación.*Obligatorio
amountDoubleMonto a cobrar, máximo 2 decimales.*Obligatorio
msiIntIndica la cantidad de meses a diferir la compra (3, 6, 9, 12, 18).Opcional
tipDoubleMonto opcional para propina, máximo 2 decimales. Actualmente este parámetro tiene un límite de 25%Opcional
folioStringNúmero identificador de transacción que puede ser enviado en la solicitud de venta.*Obligatorio

🚧

Nota.

Si se requiere el uso de la propina y si el monto debe ser mayor al 25%, el comercio se puede comunicar con su comercial asignado correspondiente para que se coordine con el equipo de operaciones y ese límite sea aumentado al porcentaje que sea necesario. Este aumento de límite ya se realizaría en produccción después de terminar con la integración y de realizar la certificación exitosamente como lo indica la sección de Certificación SDK de esta documentación.

val sale = SaleRequest("mx.com.netpay.demosdk", amount,msi,tip,folio)
SaleRequest sale = new SaleRequest("mx.com.netpay.demosdk", amount, tip,msi, null, null,
                        null, null, folio, null, null, null, null,
                        null, null);

5.1 Implementar propina.

En caso de implementar ventas con propina, utilizar el siguiente código:

saleButton.setOnClickListener {
  
val folio = folio.text.toString()
val amount = amountTE.text.toString().toDoubleOrNull()?:0.0
val tip = tip.text.toString().toDoubleOrNull()?:0.0
 val msi = msi.text.toString().toIntOrNull()()?:0
val sale = SaleRequest("mx.com.netpay.demosdk", amount, folio = folio,msi = msi, tip = tip)
  
 try {
                smartApi.doTrans(sale)
            } catch (e: SmartApiException) {
                Toast.makeText(this, e.message,Toast.LENGTH_LONG).show()
            }
        }
double amount = Double.parseDouble(amountEt.getText().toString());
double tip =Double.parseDouble(amountEt.getText().toString());
SaleRequest sale = new SaleRequest("mx.com.netpay.demosdk", amount, tip,null, null, null, null, null, null, null, null, null, null,null, null);

📘

Nota

Para activar en la Smart PinPad DEV la opción de propina, ir al apartado de [configuración].
https://netpay.readme.io/docs/introducci%C3%B3n-7#configuraci%C3%B3n-de-la-terminal-opcional

6. Crear método doTrans() para enviar una venta.

Podemos enviar una petición para realizar el cobro mediante el método doTrans(), el cual recibe por parámetro el objeto de tipo SaleRequest creado en el paso anterior.

saleButton.setOnClickListener {
  
val folio = folio.text.toString()
val amount = amountTE.text.toString().toDoubleOrNull()?:0.0
val tip = tip.text.toString().toDoubleOrNull()?:0.0
 val msi = msi.text.toString().toIntOrNull()()?:0
val sale = SaleRequest("mx.com.netpay.demosdk", amount, folio = folio,msi = msi, tip = tip)
  
 try {
                smartApi.doTrans(sale)
            } catch (e: SmartApiException) {
                Toast.makeText(this, e.message,Toast.LENGTH_LONG).show()
            }
        }
double amount = Double.parseDouble(amountEt.getText().toString());

                double tip =Double.parseDouble(amountEt.getText().toString());

                SaleRequest sale = new SaleRequest("mx.com.netpay.demosdk", amount, tip,null, null, null,
                        null, null, null, null, null, null, null,
                        null, null);
                smartApi.doTrans(sale);

7. Crear objeto ReprintRequest para reimpresión de Ticket.

Para poder reimprimir el Ticket de una venta realizada, es necesario crear una instancia de la clase
ReprintRequest la cual recibe por parámetros lo siguiente:

Parámetro.Tipo de parámetro.Descripción.Restricciones.
appIdStringNombre del paquete de la aplicación.*Obligatorio
orderIdStringNúmero de la orden a reimprimir.*Obligatorio
val sale = ReprintRequest("mx.com.netpay.demosdk", orderId )
try {
    smartApi.doTrans(sale)
} catch (e: SmartApiException) {
    Toast.makeText(this, e.message,Toast.LENGTH_LONG).show()
}
String orderId = orderIdEt.getText().toString();
                ReprintRequest reprintRequest = new ReprintRequest("mx.com.netpay.demosdk", orderId);
                smartApi.doTrans(reprintRequest);

8. Crear objeto CancelRequest para cancelar una venta.

Si se desea cancelar una venta previamente realizada, es necesario crear un objeto de tipo CancelRequest, el cuál recibe por parámetros lo siguiente:

Parámetro.Tipo de parámetro.Descripción.Restricciones.
appIdStringNombre del paquete de la aplicación.*Obligatorio
orderIdStringNúmero de la orden a cancelar.*Obligatorio
val sale = CancelRequest("mx.com.netpay.demosdk", orderId )
try {
    smartApi.doTrans(sale)
} catch (e: SmartApiException) {
    Toast.makeText(this, e.message,Toast.LENGTH_LONG).show()
}
String orderId = orderIdEt.getText().toString();
               
CancelRequest voidRequest = new CancelRequest("mx.com.netpay.demosdk", orderId);
smartApi.doTrans(voidRequest);

📘

Nota.

Sólo se puede cancelar una transacción realizada el mismo día, y la cancelación se debe solicitar antes de las 20:00 hora Ciudad de México por el monto total.

9. Obtener la respuesta.

Cuando el usuario termina con la actividad subsiguiente y regresa, el sistema llama al método onActivityResult() de la actividad. Este método incluye tres parámetros:
• requestCode (Int) [requerido]: Código de solicitud que se pasó a startActivityForResult().
• resultCode (Int) [requerido]: Código de resultado especificado por la segunda actividad. El valor será RESULT_OK en caso de que la operación se haya realizado de manera correcta. En caso de que no, el resultado será RESULT_CANCELEDE, ya sea por que se haya retirado el usuario o falló la operación por algún motivo.
• data (Intent) [requerido]: Intent que lleva los datos del resultado.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if(data != null) {
        val response = when(requestCode) {
            Constants.SALE_REQUEST -> smartApi.onResult(requestCode,resultCode,data) as SaleResponse
            Constants.CANCEL_REQUEST -> smartApi.onResult(requestCode,resultCode,data) as CancelResponse
            Constants.REPRINT_REQUEST-> smartApi.onResult(requestCode,resultCode,data) as ReprintResponse
            else -> null
        }
        tvResponse.text = Gson().toJson(response) //TextView para mostrar la respuesta en formato JSON
    }
}
@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(data != null) {
            BaseResponse response = null;
            switch (requestCode) {
                case Constants.SALE_REQUEST:
                    response = (SaleResponse) smartApi.onResult(requestCode,resultCode,data);
                    break;

                case Constants.CANCEL_REQUEST:
                    response = (CancelResponse) smartApi.onResult(requestCode,resultCode,data);
                    break;

                case Constants.REPRINT_REQUEST:
                    response = (ReprintResponse) smartApi.onResult(requestCode,resultCode,data);

                    break;

                case Constants.PRINT_REQUEST:
                    response = (PrintResponse) smartApi.onResult(requestCode,resultCode,data);
                    break;
            }
            if(response != null) {
                responseTv.setText(new Gson().toJson(response));
            }
        }
    }

10. Crear objeto PrintRequest para Ticket personalizado.

Si se requiere implementar la solicitud de impresión, se puede utilizar el siguiente código:

print.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Crear una página
                IPage page = smartApi.createPage();

                //Crear unidad que contiene texto y otros formatos
                IPage.ILine.IUnit unit1 = page.createUnit();
                unit1.setText("Texto 1");
                unit1.setGravity(Gravity.START);

                //Se pueden agregar 2 o más unidades a una línea y se dividirá en columnas
                IPage.ILine.IUnit unit2 = page.createUnit();
                unit2.setText("Texto 2");
                unit2.setGravity(Gravity.END);

                //Se crea una línea y se agregan sus unidades.
                page.addLine().
                        addUnit(unit1).
                        addUnit(unit2);

                //Se crea una nueva unidad
                IPage.ILine.IUnit unit3 = page.createUnit();
                unit3.setText("Texto 3");
                unit3.setGravity(Gravity.CENTER);

                //Se crea una nueva línea y se agrega la unidad pasada
                page.addLine().addUnit(unit3);

                //Se crea un request del tipo PrintRequest con el package name del app y la página creada
                PrintRequest printRequest = new PrintRequest("mx.com.netpay.demosdk", page);

                smartApi.doTrans(printRequest);
            }
        });

11. Customizar el logo en el ticket de venta.

Ejemplo de Ticket con un logo implementado.

483
val page = smartApi.createPage()
                val bm = BitmapFactory.decodeResource(resources,R.drawable.logo_ticket)

                smartApi.doTrans(sale,page,bm)

📘

Nota.

El tamaño del logotipo debe tener como máximo una altura de 100px y un ancho de 150px. De lo contrario podría generar conflicto.

12 JSON de respuesta Venta, Reimpresión y Cancelación SDK 1.1.5

{
    "affiliation":" 9352287370",
    "amount":"109.0",
    "authCode":"222222",
    "bin":"376665",
    "cardType":"C",
    "cardTypeName":"AMEX",
    "folioNumber":"prueba1",
    "isRePrint":false,
    "orderId":"200917102306-0820649118",
    "reprintModule":"C", 
    "spanRoute":"1234",
    "transDate":"SEP,17,20 15:10:06",
    "transType":"A",
    "meessage":"Transaccion exitosa",
    "success":true
  }
{
    "autCode":"222222",
    "folioNumber":"prueba1",
    "isRePrint":true,
    "orderId":"200917102306-0820649118",
    "reprintModule":"C", 
    "spanRoute":"8425",
    "transType":"A",
    "meessage":"Transaccion exitosa",
    "success":true
  }
{
    "autCode":"222222",
    "folioNumber":"prueba1",
    "isRePrint":false,
    "orderId":"200917102306-0820649118",
    "reprintModule":"C", 
    "spanRoute":"8425",
    "transType":"V",
    "meessage":"Transaccion exitosa",
    "success":true
  }
CampoDescripciónTipoEjemploTipo de transacción a la que aplica
successSi la respuesta es exitosa contesta con "true" si la respuesta es declinada contesta con "false".BooleanDependiendo el resultado:

1. """true""
2. ""false"""
Venta.
Reimpresión.
Cancelación.
messageMensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo.StringDependiendo el resultado:

1. """Transacción exitosa""
2. ""Error de conexión""
3. ""TRANSACCION RECHAZADA"
Venta.
Reimpresión.
Cancelación.
authCodeValor generado por la autoridad de autorización para una transacción aprobada.String"222222"Venta.
Reimpresión.
Cancelación.
folioNumberNúmero identificador de transacción que puede ser enviado en la solicitud de venta.String"Prueba1"
spanRouteÚltimos 4 dígitos de la tarjeta.String"1234"Venta.
orderIdIdentificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación.String"200917102306-0820649118"Venta.
Reimpresión.
Cancelación.
folioNumberNúmero identificador de transacción que puede ser enviado en la solicitud de venta.StringActualmente no se envía en la respuesta de regresoVenta.
binBin de la tarjeta 6 primeros dígitos de la tarjeta.String"376664"Venta.
amountMonto total de la transacción con todo y propina.String"109.0"Venta.
cardTypeNameRepresenta el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc.StringDependiendo la tarjeta ingresada:

1. "AMEX"
2. VISA
3. MASTERCARD
Venta.
affiliationNúmero de afiliación del comercio.String"9352287370"Venta
transDateFecha y hora de la transacción.String"SEP,17,20 15:10:06"Venta.
cardTypeIdentificador de tipo de tarjeta. Débito (D), Crédito (C).String"C"Venta.
Reimpresión.
Cancelación.
isRePrintValor que indica si la transacción es Reimpresión "true" y si es Cancelación o Venta es "false"BooleanVenta y cancelación: "false"

Reimpresión: "true"
Venta.
Reimpresión.
Cancelación.
transTypeIndica el tipo de operación realizada. Venta (A), Cancelación (V).StringVenta: "A"
Reimpresión: "A"
Cancelación: "V"
Venta.
Reimpresión.
Cancelación.
reprintModuleIdentificador interno.String"C"Venta.
Reimpresión.
Cancelación.

13. Cambios en el SDK versión 1.1.6

13.1 JSON de respuesta Venta, Reimpresión y Cancelación SDK 1.1.6

{
  "affiliation": "7389108",
  "amount": "50.0",
  "authCode": "222222",
  "bin": "557910",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "folioNumber": "folioPrueba50",
  "isRePrint": false,
  "orderId": "230703103345-1493194550",
  "reprintModule": "C",
  "spanRoute": "4714",
  "transDate": "JUL. 03, 23 10:34:31 ",
  "transType": "A",
  "message": "Transacción Valida",
  "success": true
}
{
  "authCode": "222222",
  "isRePrint": true,
  "orderId": "230703103345-1493194550",
  "reprintModule": "C",
  "spanRoute": "4714",
  "transType": "A",
  "message": "Transacción Valida",
  "success": true
}
{
  "authCode": "222222",
  "isRePrint": false,
  "orderId": "230703103345-1493194550",
  "reprintModule": "C",
  "spanRoute": "4714",
  "transType": "V",
  "message": "Transacción Valida",
  "success": true
}
CampoDescripciónTipoEjemploTipo de transacción a la que aplica
affiliationNúmero de afiliación del comercio.String"9352287370"Venta
amountMonto total de la transacción con todo y propina.String"109.0"Venta.
authCodeValor generado por la autoridad de autorización para una transacción aprobada.String"222222"Venta.
Reimpresión.
Cancelación.
binBin de la tarjeta 6 primeros dígitos de la tarjeta.String"376664"Venta.
cardTypeIdentificador de tipo de tarjeta. Débito (D), Crédito (C).String"C"Venta.
Reimpresión.
Cancelación.
cardTypeNameRepresenta el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc.StringDependiendo la tarjeta ingresada:

1. "AMEX"
2. VISA
3. MASTERCARD
Venta.
folioNumberNúmero identificador de transacción que puede ser enviado en la solicitud de venta.String"Prueba1"
isRePrintValor que indica si la transacción es Reimpresión "true" y si es Cancelación o Venta es "false"BooleanVenta y cancelación: "false"

Reimpresión: "true"
Venta.
Reimpresión.
Cancelación.
orderIdIdentificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación.String"200917102306-0820649118"Venta.
Reimpresión.
Cancelación.
reprintModuleIdentificador interno.String"C"Venta.
Reimpresión.
Cancelación.
spanRouteÚltimos 4 dígitos de la tarjeta.String"1234"Venta.
transDateFecha y hora de la transacción.String"SEP,17,20 15:10:06"Venta.
transTypeIndica el tipo de operación realizada. Venta (A), Cancelación (V).StringVenta: "A"
Reimpresión: "A"
Cancelación: "V"
Venta.
Reimpresión.
Cancelación.
messageMensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo.StringDependiendo el resultado:

1. """Transacción exitosa""
2. ""Error de conexión""
3. ""TRANSACCION RECHAZADA"
Venta.
Reimpresión.
Cancelación.
successSi la respuesta es exitosa contesta con "true" si la respuesta es declinada contesta con "false".BooleanDependiendo el resultado:

1. """true""
2. ""false"""
Venta.
Reimpresión.
Cancelación.

14. Cambios en el SDK versión 1.1.7

14.1 JSON de respuesta Venta, Reimpresión y Cancelación SDK 1.1.7

{
  "affiliation": "7389108",
  "applicationLabel": "Debit MasterCard",
  "arqc": "3E4DC43DAE03E980",
  "aid": "A0000000041010",
  "amount": "40.0",
  "authCode": "222222",
  "bankName": "SANTANDER",
  "bin": "557910",
  "cardExpDate": "07/24",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "cityName": "GRAL. ESCOBEDO NUEVO LEON",
  "responseCode": "00",
  "folioNumber": "folioPrueba40pesos",
  "hasPin": false,
  "hexSign": "00000100000001DA0000009E000000040800031CFF02FF02D300A765326D39AF4851DDAD299DC0D867CA598148FC5A0DF563B17D718CB5B0FF02153A99ED4287E26E2CBC71A7692E8C39D0596961B31EDB1673CDD68BDF70CBFD0FA595CD6803399BE323B3301AFF0255045F503840F1683A739312C1628CC48800D057BAC401BC2026EC84491D20C558FF02FF02FF02FF02FF02FF02FF02FF02FF02D868E303AAEB9C7C4192E61FE7B3AB913601401875471D0514393626E51641413BAFFF00E35687BD8BD3CBDBA0FF022941D320F25668E08EA1E7079FA19D506964481D0F276ACDE6B3591302D68EFF029A28EA831AB63BBD18D72E7D600C2C0A71F3A8977E569383F20F0DA2243ABCC65769BAB5CDFF02F3F0DCF1754460FF028C88BA61542AFF021AF7A0FF024329BF08F1A044DAD708FF02606432BD1A4ABBFF02BE106ABE4E33BAEB4EFF02A4DE66258C91AA343EFF020C75977B8FB81EFF02E833F944039FA1DD81186AFCC4A93714A2AC8B03404B38195379CA5E064FE623FBBDA159400B249A959C204843EBD69AC2141F3590941CF14E5710FF02381DAF98EB9B9B3913712758E8D5AED9C735F4A628EF19810556C9D2EBB1AA7F389D5E1EFF028111EE5B912AC94E60C65CE0215BCE0DC289B2E2024FBB4DFAD331C0FF02FF02FF02FF02FF02FF02FF02FF02FF02F94D7FF9F834648B9E4B6FB3435BF16646F718FB3A273050BEF8DD5C000415630D99BC9EDD1B99F69EE2EBB5BDE75D77E546CAF179608FED22F0C0FF026E09D161578214EC6A4805C2391AD0ADC567AB86FCB56685F59ABC0A159A79C354A9DF375EA752C60D68FF02258BB40CD98680FF02FF02FF02",
  "internalNumber": "",
  "isQps": 0,
  "isRePrint": false,
  "moduleCharge": "11",
  "moduleLote": "1",
  "customerName": "EL CLIENTE               /",
  "terminalId": "1493194550",
  "orderId": "230703102708-1493194550",
  "preAuth": "0",
  "preStatus": 0,
  "promotion": "00",
  "rePrintDate": "1.3.10.p.p_20230508",
  "rePrintMark": "MASTER",
  "reprintModule": "C",
  "cardNumber": "4714",
  "storeId": "651076",
  "storeName": "TERMINAL",
  "streetName": "Estrellas 247 312312312",
  "tableId": "",
  "tipAmount": "0.0",
  "tipLessAmount": "40.0",
  "transDate": "JUL. 03, 23 10:27:54 ",
  "transType": "A",
  "transactionCertificate": "CE50A2E550757B23",
  "transactionId": "495C25F5-227D-1A1E-92D1-08BB80F50094",
  "message": "Transacción Valida",
  "success": true
}
{
  "affiliation": "7389108",
  "applicationLabel": "Debit MasterCard",
  "arqc": "3E4DC43DAE03E980",
  "aid": "A0000000041010",
  "amount": "40.0",
  "authCode": "222222",
  "bankName": "SANTANDER",
  "bin": "557910",
  "cardExpDate": "07/24",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "cityName": "GRAL. ESCOBEDO NUEVO LEON",
  "responseCode": "00",
  "folioNumber": "",
  "hasPin": false,
  "hexSign": "00000100000001DA0000009E000000040800031CFF02FF02D300A765326D39AF4851DDAD299DC0D867CA598148FC5A0DF563B17D718CB5B0FF02153A99ED4287E26E2CBC71A7692E8C39D0596961B31EDB1673CDD68BDF70CBFD0FA595CD6803399BE323B3301AFF0255045F503840F1683A739312C1628CC48800D057BAC401BC2026EC84491D20C558FF02FF02FF02FF02FF02FF02FF02FF02FF02D868E303AAEB9C7C4192E61FE7B3AB913601401875471D0514393626E51641413BAFFF00E35687BD8BD3CBDBA0FF022941D320F25668E08EA1E7079FA19D506964481D0F276ACDE6B3591302D68EFF029A28EA831AB63BBD18D72E7D600C2C0A71F3A8977E569383F20F0DA2243ABCC65769BAB5CDFF02F3F0DCF1754460FF028C88BA61542AFF021AF7A0FF024329BF08F1A044DAD708FF02606432BD1A4ABBFF02BE106ABE4E33BAEB4EFF02A4DE66258C91AA343EFF020C75977B8FB81EFF02E833F944039FA1DD81186AFCC4A93714A2AC8B03404B38195379CA5E064FE623FBBDA159400B249A959C204843EBD69AC2141F3590941CF14E5710FF02381DAF98EB9B9B3913712758E8D5AED9C735F4A628EF19810556C9D2EBB1AA7F389D5E1EFF028111EE5B912AC94E60C65CE0215BCE0DC289B2E2024FBB4DFAD331C0FF02FF02FF02FF02FF02FF02FF02FF02FF02F94D7FF9F834648B9E4B6FB3435BF16646F718FB3A273050BEF8DD5C000415630D99BC9EDD1B99F69EE2EBB5BDE75D77E546CAF179608FED22F0C0FF026E09D161578214EC6A4805C2391AD0ADC567AB86FCB56685F59ABC0A159A79C354A9DF375EA752C60D68FF02258BB40CD98680FF02FF02FF02",
  "internalNumber": "",
  "isQps": 0,
  "isRePrint": false,
  "moduleCharge": "11",
  "moduleLote": "1",
  "customerName": "EL CLIENTE               /",
  "terminalId": "1493194550",
  "orderId": "230703102708-1493194550",
  "preAuth": "0",
  "preStatus": 0,
  "promotion": "00",
  "rePrintDate": "1.3.10.p.p_20230508",
  "rePrintMark": "MASTER",
  "reprintModule": "C",
  "cardNumber": "4714",
  "storeId": "651076",
  "storeName": "TERMINAL",
  "streetName": "Estrellas 247 312312312",
  "tableId": "",
  "tipAmount": "0.0",
  "tipLessAmount": "40.0",
  "transDate": "JUL. 03, 23 10:27:54 ",
  "transType": "A",
  "transactionCertificate": "CE50A2E550757B23",
  "transactionId": "495C25F5-227D-1A1E-92D1-08BB80F50094",
  "message": "Transacción Valida",
  "success": true
}
{
  "applicationLabel": "Debit MasterCard",
  "arqc": "3E4DC43DAE03E980",
  "aid": "A0000000041010",
  "amount": "40.0",
  "authCode": "222222",
  "bankName": "SANTANDER",
  "bin": "",
  "cardExpDate": "24/07",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "cityName": "GRAL. ESCOBEDO NUEVO LEON",
  "responseCode": "00",
  "folioNumber": "folioPrueba40pesos",
  "hasPin": false,
  "hexSign": "",
  "internalNumber": "",
  "isQps": 0,
  "isRePrint": false,
  "moduleCharge": "12",
  "moduleLote": "1",
  "terminalId": "1493194550",
  "orderId": "230703102708-1493194550",
  "preAuth": "0",
  "preStatus": 0,
  "promotion": "00",
  "rePrintDate": "1.3.10.p.p_20230508",
  "rePrintMark": "MASTERCARD",
  "reprintModule": "C",
  "cardNumber": "4714",
  "storeId": "651076",
  "storeName": "TERMINAL",
  "streetName": "Estrellas 247 312312312",
  "tableId": "",
  "tipAmount": "null",
  "tipLessAmount": "40.0",
  "transDate": "JUL. 03, 23 10:27:54",
  "transType": "V",
  "message": "Transacción Valida",
  "success": true
}
IdNombre campoDescripciónTipo de dato
1affiliationNúmero de afiliación del comercioVARCHAR2(50 BYTE)
2applicationLabelInformación sobre la lectura de la tarjeta.VARCHAR2(100 BYTE)
3arqcInformación sobre la lectura de la tarjeta.VARCHAR2(250 BYTE)
4aidInformación sobre la lectura de la tarjeta.VARCHAR2(50 BYTE)
5amountMonto total de la transacción con todo y propina.VARCHAR(250 BYTE)
6authCodeValor generado por la autoridad de autorización para una transacción aprobada.VARCHAR2(7 BYTE)
7bankNameNombre de la institución financiera emisora de la tarjeta.VARCHAR2(250 BYTE)
8binPrimeros 6 digitos de la tarjeta.VARCHAR2(6 BYTE)
9cardExpDateFecha de expiración de la tarjeta en formato MM/YY.VARCHAR2(5 BYTE)
10cardTypeIdentificador de tipo de tarjeta. Débito (D), crédito (C).VARCHAR2(20 BYTE)
11cardTypeNameRepresenta el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc.VARCHAR2(250 BYTE)
12cityNameCiudad con la que se dió de alta el comercio.VARCHAR2(150 BYTE)
13responseCodeCó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)
14folioNumberNúmero identificador de transacción que puede ser enviado en la solicitud de venta.VARCHAR2(250 BYTE)
15hasPinIndica si la transacción fue aprobada mediante NIP.BOOLEAN(FALSE,TRUE)
16hexSignFirma autógrafa en caso de que la tarjeta no cuente con NIP.VARCHAR2(4000 BYTE)
17internalNumberIdentificador interno.VARCHAR2(250 BYTE)
18isQpsIndica el monto cobrado por quick payment service.NUMBER(15,2)
19isRePrintMensaje que indica si la transacción es un duplicado o una venta.

Venta:false
Reimpresion:true
BOOLEAN(FALSE,TRUE)
20moduleChargeIdentificador interno.VARCHAR2(20 BYTE)
21moduleLoteIdentificador interno.VARCHAR (9)
22customerNameNombre del tarjeta habiente.VARCHAR2(100 BYTE)
23terminalIdNúmero de serie de la terminal.VARCHAR2(20 BYTE)
24orderIdIdentificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación.VARCHAR2(36 BYTE)
25preAuthPre-autorización.VARCHAR (9)
26preStatusPre-autorización.NUMBER(15,2)
27promotionIndica el número de meses sin intereses en que una transacción fue parcializada.VARCHAR2(20 BYTE)
28rePrintDateIndica la versión de la aplicación.VARCHAR2(100 BYTE)
29rePrintMarkIdentificador interno.VARCHAR2(100 BYTE)
30reprintModuleIdentificador interno.VARCHAR2(1 BYTE)
31cardNumberÚltimos 4 dígitos de la tarjeta leída.VARCHAR2(50 BYTE)
32storeIdNúmero identificador de comercio asignado por terminal.
33storeNameNombre del comercio dado de alta.VARCHAR2(60 BYTE)
34streetNameDirección del comercio dado de alta.VARCHAR2(150 BYTE)
35tableIdIdentificador interno.VARCHAR2(250 BYTE)
36tipAmountIndica el monto para propina, en caso de ser enviado.VARCHAR()
37tipLessAmountIndica el monto menos propina.VARCHAR()
38transDateFecha , 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
39transTypeIndica el tipo de operación realizada. Venta (A), Cancelación (V).VARCHAR2(5 BYTE)
40transactionCertificateInformación sobre la lectura de la tarjeta.VARCHAR2(50 BYTE)
41transactionIdId de la transacción.VARCHAR2(36 BYTE)
42messageMensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo.VARCHAR2(200 BYTE)
43traceabilityObjeto para envío de información adicional.OBJECT

15. Cambios en el SDK versión 1.1.8

🚧

Nota.

Para utilizar esta última versión del SDK (v1.1.8) se realizó una adecuación en el JSON de respuesta con la Smart PinPad 1.3.10.p.p y es que la propina ya se regresa en otro campo llamado tipAmount por lo que el campo Amount ya no trae el total de la compra más la propina, solamente el total de la compra. Si integraste con una versión pasada de SDK y utilizas propina debes considerar este cambio y adecuarlo en tu sistema.

15.1 JSON de respuesta Venta, Reimpresión y Cancelación SDK 1.1.8

{
  "affiliation": "7389108",
  "applicationLabel": "Debit MasterCard",
  "arqc": "C6DC7D46860CE2E5",
  "aid": "A0000000041010",
  "amount": "30.0",
  "authCode": "222222",
  "bankName": "SANTANDER",
  "bin": "557910",
  "cardExpDate": "07/24",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "cityName": "GRAL. ESCOBEDO NUEVO LEON",
  "responseCode": "00",
  "folioNumber": "folioPrueba12345",
  "hasPin": false,
  "hexSign": "00000100000001DA0000009E000000040800031CFF02FF02D300A765326D39AF4851DCB5074835ED723A4160846C716837D6E84492FA8F20FF020F18D9F3C3072E4CED72518E14A28A42C1D02B5C85142B3D7A9C083B63612AAF8AFE0102ADF720513D0B68FF025CE03CC612B5DE628117EAEA276E54656749D47B09E6EB43E7A9A1190F5F3F18FF02FF02FF02FF02FF02FF02FF02FF02FF02D8644998AA1E4A1C737D7886500A2BC0BE303ACD9D0B7F338A3F1817BB8B4999A9C4AFDC38A728AD73BD80FF022A440EEE6D1BF12BED7EBE29C62C1132235A4B68A9D0281D94796200A0FF02596E5DA24C0FC778EB3F5A159654841AEED1829E57B8C743974213C15D755D974758C8FF02FF02FF02FF02FF02FF02BB8E61CBFF0295C662F202471CB42EFF02BA7507A5FCF3FF02D8BFE4E54BD02320754ABA094CEAD6BE55FDDD791CC01DB9BC0790F83694620EDC99E180009F07DADBCBD003D3C7CC5C281E9CA68EF0C4F9BA7873FF023BAB330F66519000B88C16A92EF3A4B577A8FBCDDDC97C41DD0BDCA60B2D432232CBAAE8FF025607C658B9CD5D8457451B124893AA3FEA5D9F31F3713F7D724C857531F9F2FF025B2FF2A5F226769014FF020305AC0924AFFF020A3B3D95E0FF022CB994FF024529BCE0FF0251005978FF02FF008B4676FF02FF02FF00C261DE993DFF0040D67F77B8C86FB1503E25CD0C9CD19FCEBB6D4FC689703A9E007EA70061C155B42585CA7385B1792D9449CAD55A76EF90858DC295FF026E23DDC603EF5467870CF525E5F9CCBD5DCB9758D6185094929594C8C5AFCD24C2AFDA920234C8FF025EC68A009B69F0FF02FF02FF02",
  "internalNumber": "",
  "isQps": 0,
  "isRePrint": false,
  "moduleCharge": "8",
  "moduleLote": "1",
  "customerName": "EL CLIENTE               /",
  "terminalId": "1493194550",
  "orderId": "230703100949-1493194550",
  "preAuth": "0",
  "preStatus": 0,
  "promotion": "00",
  "rePrintDate": "1.3.10.p.p_20230508",
  "rePrintMark": "MASTER",
  "reprintModule": "C",
  "cardNumber": "4714",
  "storeId": "651076",
  "storeName": "TERMINAL",
  "streetName": "Estrellas 247 312312312",
  "tableId": "",
  "tipAmount": "0.0",
  "tipLessAmount": "30.0",
  "transDate": "JUL. 03, 23 10:10:34 ",
  "transType": "A",
  "transactionCertificate": "DAAC07CAD2755485",
  "transactionId": "3F45CB05-9A8F-A674-E5A3-AD7DD04BD638",
  "message": "Transacción Valida",
  "success": true
}
{
  "affiliation": "7389108",
  "applicationLabel": "Debit MasterCard",
  "arqc": "C6DC7D46860CE2E5",
  "aid": "A0000000041010",
  "amount": "30.0",
  "authCode": "222222",
  "bankName": "SANTANDER",
  "bin": "557910",
  "cardExpDate": "07/24",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "cityName": "GRAL. ESCOBEDO NUEVO LEON",
  "responseCode": "00",
  "folioNumber": "",
  "hasPin": false,
  "hexSign": "00000100000001DA0000009E000000040800031CFF02FF02D300A765326D39AF4851DCB5074835ED723A4160846C716837D6E84492FA8F20FF020F18D9F3C3072E4CED72518E14A28A42C1D02B5C85142B3D7A9C083B63612AAF8AFE0102ADF720513D0B68FF025CE03CC612B5DE628117EAEA276E54656749D47B09E6EB43E7A9A1190F5F3F18FF02FF02FF02FF02FF02FF02FF02FF02FF02D8644998AA1E4A1C737D7886500A2BC0BE303ACD9D0B7F338A3F1817BB8B4999A9C4AFDC38A728AD73BD80FF022A440EEE6D1BF12BED7EBE29C62C1132235A4B68A9D0281D94796200A0FF02596E5DA24C0FC778EB3F5A159654841AEED1829E57B8C743974213C15D755D974758C8FF02FF02FF02FF02FF02FF02BB8E61CBFF0295C662F202471CB42EFF02BA7507A5FCF3FF02D8BFE4E54BD02320754ABA094CEAD6BE55FDDD791CC01DB9BC0790F83694620EDC99E180009F07DADBCBD003D3C7CC5C281E9CA68EF0C4F9BA7873FF023BAB330F66519000B88C16A92EF3A4B577A8FBCDDDC97C41DD0BDCA60B2D432232CBAAE8FF025607C658B9CD5D8457451B124893AA3FEA5D9F31F3713F7D724C857531F9F2FF025B2FF2A5F226769014FF020305AC0924AFFF020A3B3D95E0FF022CB994FF024529BCE0FF0251005978FF02FF008B4676FF02FF02FF00C261DE993DFF0040D67F77B8C86FB1503E25CD0C9CD19FCEBB6D4FC689703A9E007EA70061C155B42585CA7385B1792D9449CAD55A76EF90858DC295FF026E23DDC603EF5467870CF525E5F9CCBD5DCB9758D6185094929594C8C5AFCD24C2AFDA920234C8FF025EC68A009B69F0FF02FF02FF02",
  "internalNumber": "",
  "isQps": 0,
  "isRePrint": false,
  "moduleCharge": "8",
  "moduleLote": "1",
  "customerName": "EL CLIENTE               /",
  "terminalId": "1493194550",
  "orderId": "230703100949-1493194550",
  "preAuth": "0",
  "preStatus": 0,
  "promotion": "00",
  "rePrintDate": "1.3.10.p.p_20230508",
  "rePrintMark": "MASTER",
  "reprintModule": "C",
  "cardNumber": "4714",
  "storeId": "651076",
  "storeName": "TERMINAL",
  "streetName": "Estrellas 247 312312312",
  "tableId": "",
  "tipAmount": "0.0",
  "tipLessAmount": "30.0",
  "transDate": "JUL. 03, 23 10:10:34 ",
  "transType": "A",
  "transactionCertificate": "DAAC07CAD2755485",
  "transactionId": "3F45CB05-9A8F-A674-E5A3-AD7DD04BD638",
  "message": "Transacción Valida",
  "success": true
}
{
  "applicationLabel": "Debit MasterCard",
  "arqc": "C6DC7D46860CE2E5",
  "aid": "A0000000041010",
  "amount": "30.0",
  "authCode": "222222",
  "bankName": "SANTANDER",
  "bin": "",
  "cardExpDate": "24/07",
  "cardType": "D",
  "cardTypeName": "MASTERCARD",
  "cityName": "GRAL. ESCOBEDO NUEVO LEON",
  "responseCode": "00",
  "folioNumber": "folioPrueba12345",
  "hasPin": false,
  "hexSign": "",
  "internalNumber": "",
  "isQps": 0,
  "isRePrint": false,
  "moduleCharge": "9",
  "moduleLote": "1",
  "terminalId": "1493194550",
  "orderId": "230703100949-1493194550",
  "preAuth": "0",
  "preStatus": 0,
  "promotion": "00",
  "rePrintDate": "1.3.10.p.p_20230508",
  "rePrintMark": "MASTERCARD",
  "reprintModule": "C",
  "cardNumber": "4714",
  "storeId": "651076",
  "storeName": "TERMINAL",
  "streetName": "Estrellas 247 312312312",
  "tableId": "",
  "tipAmount": "null",
  "tipLessAmount": "30.0",
  "transDate": "JUL. 03, 23 10:10:34",
  "transType": "V",
  "message": "Transacción Valida",
  "success": true
}
IdNombre campoDescripciónTipo de dato
1affiliationNúmero de afiliación del comercioVARCHAR2(50 BYTE)
2applicationLabelInformación sobre la lectura de la tarjeta.VARCHAR2(100 BYTE)
3arqcInformación sobre la lectura de la tarjeta.VARCHAR2(250 BYTE)
4aidInformación sobre la lectura de la tarjeta.VARCHAR2(50 BYTE)
5amountMonto total de la transacción con todo y propina.VARCHAR(250 BYTE)
6authCodeValor generado por la autoridad de autorización para una transacción aprobada.VARCHAR2(7 BYTE)
7bankNameNombre de la institución financiera emisora de la tarjeta.VARCHAR2(250 BYTE)
8binPrimeros 6 digitos de la tarjeta.VARCHAR2(6 BYTE)
9cardExpDateFecha de expiración de la tarjeta en formato MM/YY.VARCHAR2(5 BYTE)
10cardTypeIdentificador de tipo de tarjeta. Débito (D), crédito (C).VARCHAR2(20 BYTE)
11cardTypeNameRepresenta el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc.VARCHAR2(250 BYTE)
12cityNameCiudad con la que se dió de alta el comercio.VARCHAR2(150 BYTE)
13responseCodeCó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)
14folioNumberNúmero identificador de transacción que puede ser enviado en la solicitud de venta.VARCHAR2(250 BYTE)
15hasPinIndica si la transacción fue aprobada mediante NIP.BOOLEAN(FALSE,TRUE)
16hexSignFirma autógrafa en caso de que la tarjeta no cuente con NIP.VARCHAR2(4000 BYTE)
17internalNumber
18isQpsIndica el monto cobrado por quick payment service.NUMBER(15,2)
19isRePrintMensaje que indica si la transacción es un duplicado o una venta.

Venta:false
Reimpresion:true
BOOLEAN(FALSE,TRUE)
20moduleChargeIdentificador interno.VARCHAR2(20 BYTE)
21moduleLoteIdentificador interno.VARCHAR (9)
22customerNameNombre del tarjeta habiente.VARCHAR2(100 BYTE)
23terminalIdNúmero de serie de la terminal.VARCHAR2(20 BYTE)
24orderIdIdentificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación.VARCHAR2(36 BYTE)
25preAuthPre-autorización.VARCHAR (9)
26preStatusPre-autorización.NUMBER(15,2)
27promotionIndica el número de meses sin intereses en que una transacción fue parcializada.VARCHAR2(20 BYTE)
28rePrintDateIndica la versión de la aplicación.VARCHAR2(100 BYTE)
29rePrintMarkIdentificador interno.VARCHAR2(100 BYTE)
30reprintModuleIdentificador interno.VARCHAR2(1 BYTE)
31cardNumberÚltimos 4 dígitos de la tarjeta leída.VARCHAR2(50 BYTE)
32storeIdNúmero identificador de comercio asignado por terminal.
33storeNameNombre del comercio dado de alta.VARCHAR2(60 BYTE)
34streetNameDirección del comercio dado de alta.VARCHAR2(150 BYTE)
35tableIdIdentificador interno.VARCHAR2(250 BYTE)
36tipAmountIndica el monto para propina, en caso de ser enviado.VARCHAR()
37tipLessAmountIndica el monto menos propina.VARCHAR()
38transDateFecha , 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
39transTypeIndica el tipo de operación realizada. Venta (A), Cancelación (V).VARCHAR2(5 BYTE)
40transactionCertificateInformación sobre la lectura de la tarjeta.VARCHAR2(50 BYTE)
41transactionIdId de la transacción.VARCHAR2(36 BYTE)
42messageMensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo.VARCHAR2(200 BYTE)
43traceabilityObjeto para envío de información adicional.OBJECT

15.2. Deshabilitar animación de ticket

Esta versión incluye esta funcionalidad para deshabilitar la animación del ticket oficial y predeterminado que proporciona NetPay y se puede implementar como en el siguiente ejemplo:

 try {
        smartApi.doTrans(sale,false,disabledPrint.isChecked)
     }
catch (e: SmartApiException) {
        Toast.makeText(this, e.message, Toast.LENGTH_LONG).show()
     }
 <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                <CheckBox
                        android:id="@+id/disabledPrint"
                        android:text="disableAnimationPrint"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"/>
  </LinearLayout>
saleButtoncheckin.setOnClickListener{
            val folio = folio.text.toString()
            val amount = amountTE.text.toString().toDoubleOrNull() ?: 0.0
            val tip = tip.text.toString().toDoubleOrNull() ?: 0.0
            var msi = act_msi.text.toString().toIntOrNull() ?: 0

            if (amount > 0.00) {
                val sale = SaleRequest(
                    "mx.com.netpay.demosdk",
                    amount,
                    folio = folio,
                    tip = tip,
                    msi = msi,
                    traceability = "",
                    checkIn = true
                )

                try {
                    smartApi.doTrans(sale,false,disabledPrint.isChecked)
                } catch (e: SmartApiException) {
                    Toast.makeText(this, e.message, Toast.LENGTH_LONG).show()
                }
            } else {
                Toast.makeText(this, "Monto debe ser mayor a 0.00", Toast.LENGTH_LONG).show()
            }

        }

🚧

Nota.

Si se elige utilizar esta funcionalidad y usar su propio ticket personalizado, se debe pasar por un proceso de certificación adicional de su ticket o voucher propio para que de esta manera sea válido por cualquier aclaración bancaria. Se cuenta con un formato para transacciones aprobadas y declinadas con el que se debe cumplir ciertos requisitos y este formato se le puede solicitar al equipo de integraciones de NetPay.

🚧

Nota2.

Si ya integraste y certificaste con una versión pasada de SDK y deseas actualizarlo a una versión más reciente recomendamos que recertifiquen nuevamente con el fin de apoyarlos a validar a través de una serie de escenarios que la implementación sea correcta.

16. Otras respuestas

{
	"bin": "",
	"folioNumber": "",
	"isRePrint": false,
	"message": "TRANSACCION RECHAZADA",
	"success": false
}
{
	"bin": "",
	"folioNumber": "",
	"isRePrint": false,
	"message": "Error de conexión",
	"success": false
}
{
	"bin": "",
	"folioNumber": "",
	"isRePrint": false,
	"message": "Cancelado por el Usuario",
	"success": false
}
{
	"bin": "",
	"folioNumber": "",
	"isRePrint": false,
	"message": "PROMOCION NO VALIDA PARA EL TIPO DE TARJETA",
	"success": false
}

En SDK también se puede deshabilitar la impresión de ticket en cualquier operativa que decida el comercio.
Se puede hacer de la siguiente manera.


Que sigue...

El siguiente paso es continuar en el apartado de Certificación en el cual se detalla las pruebas a realizar para validar el correcto funcionamiento de la integración.