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 SDK - Configuració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 2 days ago