Integración de Checkin SDK
CHECKIN SDK
Recuerda que para implementar Checkin se debe considerar también la información introductoria de una integración con terminal NetPay by Spin.
Introducción SDKConfiguración inicial de la terminal
Configuraciones adicionales
Smart SDK
Reimpresión por folio
Manejo de reversos
Certificación SDK
Post-Certificación SDK
Objeto Sale Request en Java y Kotlin
public class SaleRequest {
private String appId;
private double amount;
private Double tip;
private Integer msi;
private Integer waiter;
private Integer settlementId;
private String settlementDate;
private String table;
private String folio;
private Boolean checkIn;
private Boolean tableId;
private Object additionalData;
private Object traceability;
private String exchangeRateUsd;
private String pendingAmount;
private String storeId;
}data class SaleRequest(
val appId: String,
val amount: Double,
val tip: Double? = null,
val msi: Int? = null,
val waiter: Int? = null,
val settlementId: Int? = null,
val settlementDate: String? = null,
val table: String? = null,
val folio: String? = null,
val checkIn: Boolean? = false,
val tableId: Boolean? = false,
val additionalData: Any? = null,
val traceability: Any? = null,
val exchangeRateUsd: String? = null,
val pendingAmount: String? = null,
val storeId: String? = null
)Campos importantes para el tipo de integración SDK
| Nombre campo | Descripción | Tipo de dato |
|---|---|---|
| serialNumber | Número de serie del dispositivo al que se requiere enviar la petición. | String (Máximo hasta 20 caracteres) |
| amount | Monto total de la transacción. | Double(15,2) |
| storeId | Identificador de la tienda asignada al dispositivo. | String (Máximo hasta 38 caracteres) |
| folioNumber | Número identificador de transacción que puede ser enviado en la solicitud de venta. | String (Máximo hasta 250 caracteres) |
| msi (este valor es opcional) | Número que identifica la promoción a MSI que se desea integrar Ej: 03, 06, 09, 12 o 18 msi ( esta promoción no aplica para tarjetas Amex) | String (Máximo 2 caracteres). |
| checkIn | Activa la bandera de venta por preautorización | Booleano, true , false |
| traceability | Objeto json para enviar información relevante para el comercio (puede ser algún id de la transacción que posteriormente les servirá para hacer “match” dentro de su sistema. | Object |
Codigo Java y Kotlin
saleBtnAdditionalDataAndBitmap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String string_amount = amountEt.getText().toString();
double amount = string_amount.equals("") ? 0.0 : Double.parseDouble(string_amount);
String string_msi = act_msi.getText().toString();
Integer msi = (string_msi.equals("Sin Meses") || string_msi.equals("")) ? 0 : Integer.parseInt(string_msi);
String string_tip = amountTip.getText().toString();
double tip = string_tip.equals("") ? 0 : Double.parseDouble(string_tip);
String folio = folioEt.getText().toString();
try {
SaleRequest sale = new SaleRequest("mx.com.netpay.demosdk", amount, tip, msi, null, null,
null, null, folio, true, null, null, null,
null, null, null);
smartApi.doTrans(sale, createPage(), logoBitmap(R.drawable.shopy), false,false);
}catch(Exception e){
Toast.makeText(MainActivityJava.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});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()
}
}Obteniendo de respuesta
Al recibir respuesta esta llegará dentro del onActivityResult, el cual llegará un objeto SaleResponse. A continuación se presenta un ejemplo del objeto.
{
"affiliation": "7389108",
"applicationLabel": "MC DEBITO",
"arqc": "2E0D455185464B0E",
"aid": "A0000000041010",
"amount": "250.0",
"authCode": "123456",
"bankName": "SCOTIABANK",
"bin": "557920",
"cardExpDate": "08/22",
"cardType": "D",
"cardTypeName": "MASTERCARD",
"cityName": "Monterrey NUEVO LEON",
"responseCode": "00",
"folioNumber": "",
"hasPin": true,
"hexSign": "",
"internalNumber": "",
"isQps": 0,
"isRePrint": false,
"moduleCharge": "28",
"moduleLote": "1",
"customerName": " ",
"terminalId": "1490293929",
"orderId": "220613152556-1490293929",
"preAuth": "1",
"preStatus": 0,
"promotion": "00",
"rePrintDate": "1.3.5.p.p_9",
"rePrintMark": "MASTER",
"reprintModule": "C",
"cardNumber": "0633",
"storeName": "Netpay",
"streetName": "Calle",
"tableId": "",
"tipAmount": "0.0",
"tipLessAmount": "250.0",
"transDate": "JUN. 13, 22 15:25:56 ",
"transType": "PRE",
"transactionCertificate": "0D3E3AF5C63EACDF",
"transactionId": "D9256A27-EF9D-83B5-61E3-410B55F933AF",
"message": "Transacción exitosa",
"success": true
}Campos al recibir la respuesta.
| Nombre campo | Descripción | Tipo de dato |
|---|---|---|
| affiliation | Número de afiliación del comercio | VARCHAR2(50 BYTE) |
| applicationLabel | Información sobre la lectura de la tarjeta. | VARCHAR2(100 BYTE) |
| arqc | Información sobre la lectura de la tarjeta. | VARCHAR2(250 BYTE) |
| aid | Información sobre la lectura de la tarjeta. | VARCHAR2(50 BYTE) |
| amount | Monto total de la transacción con todo y propina. | NUMBER(15,2) |
| authCode | Valor generado por la autoridad de autorización para una transacción aprobada. | VARCHAR2(7 BYTE) |
| bankName | Nombre de la institución financiera emisora de la tarjeta. | VARCHAR2(250 BYTE) |
| cardExpDate | Fecha de expiración de la tarjeta en formato MM/YY. | VARCHAR2(5 BYTE) |
| cardType | Identificador de tipo de tarjeta. Débito (D), crédito (C). | VARCHAR2(20 BYTE) |
| cardTypeName | Representa el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc. | VARCHAR2(250 BYTE) |
| cityName | Ciudad con la que se dió de alta el comercio. | VARCHAR2(150 BYTE) |
| 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) |
| folioNumber | Número identificador de transacción que puede ser enviado en la solicitud de venta. | VARCHAR2(250 BYTE) |
| hasPin | Indica si la transacción fue aprobada mediante NIP. | false o true |
| hexSign | Firma autógrafa en caso de que la tarjeta no cuente con NIP. | VARCHAR2(4000 BYTE) |
| isQps | Indica el monto cobrado por quick payment service. | VARCHAR2(1 BYTE) |
| 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) |
| moduleCharge | Identificador interno. | VARCHAR2(20 BYTE) |
| moduleLote | Identificador interno. | NUMBER (9) |
| customerName | Nombre del tarjeta habiente. | VARCHAR2(100 BYTE) |
| terminalId | Número de serie de la terminal. | VARCHAR2(20 BYTE) |
| orderId | Identificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación. | VARCHAR2(36 BYTE) |
| preAuth | Pre-autorización. | NUMBER (9) |
| preStatus | Pre-autorización. | NUMBER(15,2) |
| promotion | Indica el número de meses sin intereses en que una transacción fue parcializada. | VARCHAR2(20 BYTE) |
| rePrintDate | Indica la versión de la aplicación. | VARCHAR2(100 BYTE) |
| rePrintMark | Identificador interno. | VARCHAR2(100 BYTE) |
| reprintModule | Identificador interno. | VARCHAR2(1 BYTE) |
| cardNumber | Últimos 4 dígitos de la tarjeta leída. | VARCHAR2(50 BYTE) |
| storeName | Nombre del comercio dado de alta. | VARCHAR2(60 BYTE) |
| streetName | Dirección del comercio dado de alta. | VARCHAR2(150 BYTE) |
| ticketDate | Fecha y hora de la transacción. | VARCHAR2(100 BYTE) |
| tipAmount | Indica el monto para propina, en caso de ser enviado. | NUMBER |
| tipLessAmount | Indica el monto menos propina. | NUMBER(15,2) |
| transDate | Fecha y hora de la transacción. | DATE |
| transType | Indica el tipo de operación realizada. Venta (A), Cancelación (V). | VARCHAR2(5 BYTE) |
| transactionCertificate | Información sobre la lectura de la tarjeta. | VARCHAR2(50 BYTE) |
| traceability | Objeto para envío de información adicional. | Object |
| TransactionId | Identificador único de la transacción, valor clave para realizar el check out, recomendamos guardar este valor en el sistema del cliente . | String |
NOTA.Les recomendamos que implementen la version 1.1.9 del SDK.
CHECKOUT POR MEDIO DE API
La URL del servicio de CHECK-OUT será la siguiente:
https://sandbox.api-netpay.com/checkio-sandbox/api/check-out
El endpoint tendrá las siguientes características:
- Método: POST
- Data type de envío: JSON
- Seguridad: Api-Key
Netpay será el encargado de proporcionar la api-key necesaria para poderse comunicar con el servicio en el ambiente de sand-box y posteriormente productivo. (La url por la que se comunicará con dicho servicio cambiará en cada escenario). La api-key será única por COMPANY y deberá ingresarse en el HEADER de la petición en el campo de Authorization:

Las api-keys se generarán por cada COMPANY que el cliente requiera y solamente podrá ser usada para los STORES que pertenezcan al COMPANY.
El body del servicio al ejecutar el request se deberá presentar como a continuación:

| Campo | Tipo | Descripción |
|---|---|---|
| storeId | Long | Identificador único de la unidad transaccional. |
| transactionId | String | Identificador único de la transacción, se obtendrá por medio del servicio de reportes para obtener las transacciones de un COMPANY. |
| totalAmount | Double | Cantidad por la cual se realizará el cierre del check-out. |
Respuestas del servicio
202 Accepted - Code 00

Indica que la transacción fue aprobada con éxito.
- message: Mensaje del servicio indicando lo que sucedió con la petición. [STRING]
- code: Código de respuesta del servicio. [STRING]
- transactionId: Identificador único de la nueva transacción realizada. [STRING]
- trxResponse: Respuesta del procesamiento de la transacción. [STRING]
202 Accepted - Code 05

Indica que la transacción ya fue procesada por lo tanto se generó un check-out para el check-in que se desea cerrar y ya no es posible volver a procesarlo nuevamente.
409 Conflict - Code 04

Indica que el servicio no pudo encontrar el check-in con el transactionId que se utilizó.
409 Conflict - Code 06

Indica que el STORE proporcionado no tiene la operativa check-in / check-out habilitada por el equipo de Netpay.
409 Conflict - Code 08

Indica que es un error de parte de Netpay y debe contactarse con el equipo de soporte para revisión del caso.
409 Conflict - Code 09

Indica que la operativa sólo permite que el check-out se pueda cerrar si no supera su monto original más el 20%.
401 UnAuthorized - No Code

Indica que el STORE proporcionado no tiene permisos con el api-key que se utilizó.
Updated over 1 year ago
