Validación de BIN y cuotas
Este proceso es obligatorio
En esta fase, se realiza la validación del BIN de la tarjeta para determinar la marca, el tipo, y si se trata de una tarjeta nacional o internacional. Si la validación es exitosa y la tarjeta corresponde a una de crédito, también se obtiene el listado de cuotas disponibles junto con sus respectivos cálculos.
Requisitos
- BIN de la tarjeta (los primeros 8 dígitos del número de la tarjeta) recuperado en el proceso de lectura
Resultado
- Después del proceso de validación del BIN, se obtendrán la marca de la tarjeta, el tipo, un indicador que señalará si debe ser tratada como nacional o internacional.
- Y, en el caso de tarjetas de crédito (no internacionales), el listado de cuotas disponibles con sus respectivos cálculos.
Paso a paso
- Instanciar el objeto
BinValidationData
pasándole el contexto. - Hacer el set del objeto
OperationFlow
. - Invocar el método
doBinValidation
y pasarle el BIN como parámetro. - Configurar un observador para recuperar el resultado.
Datos para la consulta
A continuación, se detallan los datos que necesita el método setOperationFlow
y doBinValidation
para realizar la validación del BIN y consulta de cuotas.
Campo | Descripción |
---|---|
merchantId | Identificador del merchant. |
customerId | Identificadot del cliente. |
currency | Código de moneda con el que está procesando la terminal. |
interest | Flag para indicar si la consulta es con interés o sin interés. |
bin | Primeros 8 números del número de la tarjeta. |
Recuerde que si envía el flag interest = true, el backend de Menta realizará los cálculos de interés siempre que la tarjeta no sea internacional.
Ejemplo de implementación
private val operationFlow: OperationFlow?
get() = OperationFlowHolder.operationFlow
RestClientConfiguration.configure(AppfinRestClientConfigure())
val binValidationData = BinValidationData(this)
binValidationData.setOperationFlow(
operationFlow = operationFlow,
merchantId = merchantId,
customerId = customerId,
currency = CURRENCY_LABEL,
interest = false //false = sin interés | true = con interés
)
binValidationData.doBinValidation(bin)
binValidationData.binValidationResponse.observe(this) {
if (it.status == "FOUND") {
binValidationData.setCardBrand(it.brand)
val cardType: String = when (it.type) {
"C" -> {
CardType.CREDIT.name
}
"D" -> {
CardType.DEBIT.name
}
else -> {
CardType.PREPAID.name
}
}
binValidationData.setCardType(cardType)
binValidationData.setIsInternational(it.isInternational ?: false)
binValidationData.setInstitutionId(
idInstitution = it.institutionId,
customerId = customerId
)
when (cardType) {
CardType.CREDIT.name -> {
Log.i(TAG, "Cuotas disponibles: ${it.installments.installments}")
}
else -> { //Debit y Prepaid
operationFlow!!.installments = "01"
Log.i(TAG, "Ir directo al pago")
}
}
} else {
Log.i(TAG, "Bin no encontrado")
val brandsAvailable = it.brandsAvailable
Log.i(TAG, "Marcas y tipos disponibles: $brandsAvailable")
}
}
Las cuotas disponibles se recuperan por medio del objeto InstallmentsApp
que contiene los siguientes campos:
Campo | Descripción |
---|---|
code | Número de la cuota |
financing | Tipo de financiamiento. Puede ser: BANK para planes estándar o CUOTA_SIMPLE para planes especiales. |
type | Descripción del tipo de plan. Puede ser: Planes estandar o Planes especiales para CUOTA_SIMPLE. |
installmentLabel | Monto de la cuota |
installmentAmountLabel | Número de la cuota formateado para mostrar en la pantalla |
totalAmount | Monto total incluido impuestos |
totalAmountLabel | Monto total formateado para mostrar en la pantalla |
Códigos de respuesta
El resultado se recibe mediante el objeto BinValidationResponse
. En la siguiente tabla se muestran los posibles valores que se pueden recibir como respuesta:
Código | Descripción |
---|---|
FOUND | Indica que el BIN fue encontrado en la base de datos de Menta. |
NOT_FOUND | Indica que el BIN no fue encontrado. |
- Para el caso de BIN encontrado, como siguiente paso, se debe hacer el set de la marca, tipo, flag de nacional/internacional y del institutionID usando los métodos del SDK.
- En caso de que el BIN no sea encontrado, el objeto BinValidationResponse incluirá una lista de marcas y tipos disponibles, permitiendo al cliente configurar pantallas de selección manual si lo considera necesario. Es importante destacar que estos datos son requeridos para realizar cualquier operación. Además, el SDK ofrece un método para consultar las cuotas disponibles en estos casos. A continuación, se presenta un ejemplo de su implementación.
Ejemplo para consultar cuotas disponibles
private fun getInstallments(binValidationViewModel: BinValidationData) {
val brand = "VISA"
val cardType = "CREDIT"
val isInternational = false
binValidationViewModel.getInstallments(
brand,
paymentMethod = cardType,
isInternational = isInternational
)
binValidationViewModel.getInstallmentsResponse.observe(this) {
Log.i(TAG, "installments: ${it.installments}")
}
}
- El método
getInstallments
recibe como parámetros: la marca, el tipo y el flag que indica si la tarjeta es nacional o internacional. - Como respuesta se retorna el objeto que en el caso de BIN encontrado.
Consideraciones
- Se debe enviar el
financing
en el request de la transacción. Para esto, es necesario hacer la asignación en el objetooperationFlow
.
operationFlow?.financing = installmentWithTotal.financing