Es un modelo que segmenta a los clientes morosos en 6 calificaciones, de acuerdo al avance esperado de mora en los siguientes 30 días. Reduce costos de gestión y administración de cartera morosa al segmentar a la población.
- Java >= 1.7
- Maven >= 3.3
Prerrequisito: obtener token de acceso y configuración de las credenciales de acceso. Consulte el manual aquí.
Opción 1: En caso que la configuración se integró en el archivo settingsAPIHUB.xml (ubicado en la raíz del proyecto), instale las dependencias con siguiente comando:
mvn --settings settingsAPIHUB.xml clean install -Dmaven.test.skip=trueOpción 2: Si se integró la configuración en el settings.xml del .m2, instale las dependencias con siguiente comando:
mvn install -Dmaven.test.skip=trueAntes de lanzar la prueba se deberá tener un keystore para la llave privada y el certificado asociado a ésta. Para generar el keystore se ejecutan las instrucciones que se encuentran en src/main/security/createKeystore.sh ó con los siguientes comandos:
Opcional: Si desea cifrar su contenedor, coloque una contraseña en una variable de ambiente.
export KEY_PASSWORD=your_super_secure_passwordOpcional: Si desea cifrar su keystore, coloque una contraseña en una variable de ambiente.
export KEYSTORE_PASSWORD=your_super_secure_keystore_password- Definición de los nombres de archivos y alias.
export PRIVATE_KEY_FILE=pri_key.pem
export CERTIFICATE_FILE=certificate.pem
export SUBJECT=/C=MX/ST=MX/L=MX/O=CDC/CN=CDC
export PKCS12_FILE=keypair.p12
export KEYSTORE_FILE=keystore.jks
export ALIAS=cdc- Generar llave y certificado.
# Genera la llave privada.
openssl ecparam -name secp384r1 -genkey -out ${PRIVATE_KEY_FILE}
# Genera el certificado público
openssl req -new -x509 -days 365 \
-key ${PRIVATE_KEY_FILE} \
-out ${CERTIFICATE_FILE} \
-subj "${SUBJECT}"
- Generar contenedor PKCS12 a partir de la llave privada y el certificado
# Genera el archivo pkcs12 a partir de la llave privada y el certificado.
# Deberá empaquetar su llave privada y el certificado.
openssl pkcs12 -name ${ALIAS} \
-export -out ${PKCS12_FILE} \
-inkey ${PRIVATE_KEY_FILE} \
-in ${CERTIFICATE_FILE} \
-password pass:${KEY_PASSWORD}
- Generar un keystore dummy y eliminar su contenido.
#Genera un Keystore con un par de llaves dummy.
keytool -genkey -alias dummy -keyalg RSA \
-keysize 2048 -keystore ${KEYSTORE_FILE} \
-dname "CN=dummy, OU=, O=, L=, S=, C=" \
-storepass ${KEYSTORE_PASSWORD} -keypass ${KEY_PASSWORD}
#Elimina el par de llaves dummy.
keytool -delete -alias dummy \
-keystore ${KEYSTORE_FILE} \
-storepass ${KEYSTORE_PASSWORD}- Importar el contenedor PKCS12 al keystore
#Importamos el contenedor PKCS12
keytool -importkeystore -srckeystore ${PKCS12_FILE} \
-srcstoretype PKCS12 \
-srcstorepass ${KEY_PASSWORD} \
-destkeystore ${KEYSTORE_FILE} \
-deststoretype JKS -storepass ${KEYSTORE_PASSWORD} \
-alias ${ALIAS}
#Lista el contenido del Kesystore para verificar que
keytool -list -keystore ${KEYSTORE_FILE} \
-storepass ${KEYSTORE_PASSWORD}- Iniciar sesión.
- Dar clic en la sección "Mis aplicaciones".
- Seleccionar la aplicación.
- Ir a la pestaña de "Certificados para @tuApp".
- Al abrirse la ventana emergente, seleccionar el certificado previamente creado y dar clic en el botón "Cargar":
- Iniciar sesión.
- Dar clic en la sección "Mis aplicaciones".
- Seleccionar la aplicación.
- Ir a la pestaña de "Certificados para @tuApp".
- Al abrirse la ventana emergente, dar clic al botón "Descargar":
Para hacer uso del certificado que se descargó y el keystore que se creó se deberán modificar las rutas que se encuentran e
keystore_file=your_path_for_your_keystore/keystore.jks
cdc_cert_file=your_path_for_certificate_of_cdc/cdc_cert.pem
keystore_password=your_super_secure_keystore_password
key_alias=cdc
key_password=your_super_secure_passwordEn el archivo ApiTest.java, que se encuentra en src/test/java/com/cdc/apihub/mx/vantage/test/. Se deberá modificar los datos de la petición y los datos de consumo:
-
Configurar ubicación y acceso de la llave creado en el paso 1 y el certificado descargado en el paso 2
- keystoreFile: ubicacion del archivo keystore.jks
- cdcCertFile: ubicacion del archivo cdc_cert.pem
- keystorePassword: contraseña de cifrado del keystore
- keyAlias: alias asignado al keystore
- keyPassword: contraseña de cifrado del contenedor
-
Credenciales de acceso dadas por Círculo de Crédito, obtenidas despues de la afiliación
- usernameCDC: usuario de Círculo de Crédito
- passwordCDC: contraseña de Círculo de Crédito
-
Datos de consumo del API
- url: URL de la exposicón del API
- xApiKey: Ubicada en la aplicación (creada en el paso 2) del portal y nombrada como Consumer Key
NOTA: Los datos de la siguiente petición son solo representativos.
package com.cdc.apihub.mx.vantage.test;
...
public class ApiTest {
private final VantAgeApi api = new VantAgeApi();
private Logger logger = LoggerFactory.getLogger(ApiTest.class.getName());
private ApiClient apiClient;
private String keystoreFile = "your_path_for_your_keystore/keystore.jks";
private String cdcCertFile = "your_path_for_certificate_of_cdc/cdc_cert.pem";
private String keystorePassword = "your_super_secure_keystore_password";
private String keyAlias = "your_key_alias";
private String keyPassword = "your_super_secure_password";
private String usernameCDC = "your_username_otrorgante";
private String passwordCDC = "your_password_otorgante";
private String url = "the_url";
private String xApiKey = "your_x_api_key";
private SignerInterceptor interceptor;
@Before()
public void setUp() {
interceptor = new SignerInterceptor(keystoreFile, cdcCertFile, keystorePassword, keyAlias, keyPassword);
this.apiClient = api.getApiClient();
this.apiClient.setBasePath(url);
OkHttpClient okHttpClient = new OkHttpClient().newBuilder().readTimeout(30, TimeUnit.SECONDS)
.addInterceptor(interceptor).build();
apiClient.setHttpClient(okHttpClient);
}
@Test
public void getVantageAportantesTest() throws ApiException {
AportantesPeticion peticion = new AportantesPeticion();
Integer estatusOK = 200;
Integer estatusNoContent = 204;
try {
peticion.setFolio("0000001");
peticion.setTipoContrato(CatalogoContrato.TC);
peticion.setNumeroCuenta("4772133042201399");
peticion.setDiasAtraso(1);
ApiResponse<?> response = api.getGenericVantageAportantes(xApiKey, usernameCDC, passwordCDC, peticion);
Assert.assertTrue(estatusOK.equals(response.getStatusCode()));
if (estatusOK.equals(response.getStatusCode())) {
Respuesta responseOK = (Respuesta) response.getData();
logger.info("Vantage Aportantes Test: " + responseOK.toString());
}
} catch (ApiException e) {
if (!estatusNoContent.equals(e.getCode())) {
logger.info("getVantageAportantesTest:\n");
logger.info("Response received from API: " + interceptor.getErrores().toString());
logger.info("Response processed by client:" + e.getResponseBody());
} else {
logger.info("The response was a status 204 (NO CONTENT)");
}
Assert.assertTrue(estatusOK.equals(e.getCode()));
}
}
@Test
public void getVantageNoAportantesTest() throws ApiException {
PersonaPeticion persona = new PersonaPeticion();
DomicilioPeticion domicilio = new DomicilioPeticion();
NoAportantesPeticion request = new NoAportantesPeticion();
Integer estatusOK = 200;
Integer estatusNoContent = 204;
try {
domicilio.setDireccion("INSURGENTES SUR 1007");
domicilio.setColoniaPoblacion("INSURGENTES");
domicilio.setDelegacionMunicipio("BENITO JUAREZ");
domicilio.setCiudad("CIUDAD DE MÉXICO");
domicilio.setEstado(CatalogoEstados.DF);
domicilio.setCP("11230");
persona.setPrimerNombre("PRUEBA");
persona.setApellidoPaterno("SIETE");
persona.setApellidoMaterno("JUAN");
persona.setFechaNacimiento("1980-01-07");
persona.setDomicilio(domicilio);
request.setFolio("0000002");
request.setTipoProducto(CatalogoProducto.O);
request.setTipoContrato(CatalogoContrato.TC);
request.setFrecuenciaPago(CatalogoFrecuenciaPago.M);
request.setDiasAtraso(1);
request.setNumeroCuenta("123456");
request.setFechaApertura("1990-10-19");
request.setSaldoActual(1F);
request.setPersona(persona);
ApiResponse<?> response = api.getGenericVantageNoAportantes(xApiKey, usernameCDC, passwordCDC, request);
Assert.assertTrue(estatusOK.equals(response.getStatusCode()));
if (estatusOK.equals(response.getStatusCode())) {
Respuesta responseOK = (Respuesta) response.getData();
logger.info("Vantage NO Aportantes Test: " + responseOK.toString());
}
} catch (ApiException e) {
if (!estatusNoContent.equals(e.getCode())) {
logger.info("getVantageNoAportantesTest:\n");
logger.info("Response received from API: " + interceptor.getErrores().toString());
logger.info("Response processed by client:" + e.getResponseBody());
} else {
logger.info("The response was a status 204 (NO CONTENT)");
}
Assert.assertTrue(estatusOK.equals(e.getCode()));
}
}
}Teniendo los pasos anteriores ya solo falta ejecutar la prueba unitaria, con el siguiente comando:
mvn test -Dmaven.install.skip=true

