Validación de BIN y cuotas
ℹ️
Este proceso es opcional
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, 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.
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
)
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 plan. Puede ser: BANK para planes estándar o CUOTA_SIMPLE para planes especiales. |
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.