Validación de BIN y cuotas

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

  1. Instanciar el objeto BinValidationData pasándole el contexto.
  2. Hacer el set del objeto OperationFlow.
  3. Invocar el método doBinValidation y pasarle el BIN como parámetro.
  4. 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:

CampoDescripción
codeNúmero de la cuota
financingTipo de plan. Puede ser: BANK para planes estándar o CUOTA_SIMPLE para planes especiales.
installmentLabelMonto de la cuota
installmentAmountLabelNúmero de la cuota formateado para mostrar en la pantalla
totalAmountMonto total incluido impuestos
totalAmountLabelMonto 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ódigoDescripción
FOUNDIndica que el BIN fue encontrado en la base de datos de Menta.
NOT_FOUNDIndica 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.