定制 apihub-cdc/vantage 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

apihub-cdc/vantage

Composer 安装命令:

composer require apihub-cdc/vantage

包简介

README 文档

README

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.

Requisitos

PHP 7.1 ó superior

Dependencias adicionales

  • Se debe contar con las siguientes dependencias de PHP:
    • ext-curl
    • ext-mbstring
  • En caso de no ser así, para linux use los siguientes comandos
#ejemplo con php en versión 7.3 para otra versión colocar php{version}-curl
apt-get install php7.3-curl
apt-get install php7.3-mbstring

Instalación

Ejecutar: composer install

Guía de inicio

Paso 1. Generar llave y certificado

  • Se tiene que tener un contenedor en formato PKCS12.
  • En caso de no contar con uno, ejecutar las instrucciones contenidas en lib/Interceptor/key_pair_gen.sh ó con los siguientes comandos.
  • opcional: Para cifrar el contenedor, colocar una contraseña en una variable de ambiente.
export KEY_PASSWORD=your_password
  • Definir 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 ALIAS=circulo_de_credito
  • 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 en formato PKCS12.
# Genera el archivo pkcs12 a partir de la llave privada y el certificado.
# Deberá empaquetar la llave privada y el certificado.
openssl pkcs12 -name ${ALIAS} \
    -export -out ${PKCS12_FILE} \
    -inkey ${PRIVATE_KEY_FILE} \
    -in ${CERTIFICATE_FILE} -password pass:${KEY_PASSWORD}

Paso 2. Carga del certificado dentro del portal de desarrolladores

  1. Iniciar sesión.
  2. Dar clic en la sección "Mis aplicaciones".
  3. Seleccionar la aplicación.
  4. Ir a la pestaña de "Certificados para @tuApp".

  5. Al abrirse la ventana emergente, seleccionar el certificado previamente creado y dar clic en el botón "Cargar":

Paso 3. Descarga del certificado de Círculo de Crédito dentro del portal de desarrolladores

  1. Iniciar sesión.
  2. Dar clic en la sección "Mis aplicaciones".
  3. Seleccionar la aplicación.
  4. Ir a la pestaña de "Certificados para @tuApp".

  5. Al abrirse la ventana emergente, dar clic al botón "Descargar":

Es importante que este contenedor sea almacenado en la siguiente ruta: /path/to/repository/lib/Interceptor/keypair.p12

Así mismo el certificado proporcionado por círculo de crédito en la siguiente ruta: /path/to/repository/lib/Interceptor/cdc_cert.pem

  • En caso de que no se almacene así, se debe especificar la ruta donde se encuentra el contenedor y el certificado. Ver el siguiente ejemplo:
/**
* Esto es parte del setUp() de las pruebas unitarias.
*/
$password = getenv('KEY_PASSWORD');
$this->signer = new KeyHandler(
    "/example/route/keypair.p12",
    "/example/route/cdc_cert.pem",
    $password
);

NOTA: Sólamente en caso de que el contenedor haya cifrado, se debe colocar la contraseña en una variable de ambiente e indicar el nombre de la misma, como se ve en la imagen anterior.

Paso 4. Modificar URL

Modificar la URL de la petición en lib/Configuration.php en la línea 19, como se muestra en el siguiente fragmento de código:

protected $host = 'the_url';

Paso 5. Capturar los datos de la petición

Es importante contar con el setUp() que se encargará de firmar y verificar la petición.

<?php
public function setUp()
{
  $password = getenv('KEY_PASSWORD');
  $this->keypair = 'path/to/keypair.p12';
  $this->cert = 'path/to/certificate.pem';
  $this->url = 'this_url';

  $this->signer = new KeyHandler($this->keypair, $this->cert, $password);
  $events = new MiddlewareEvents($this->signer);
  $handler = handlerStack::create();
  $handler->push($events->add_signature_header('x-signature'));
  $handler->push($events->verify_signature_header('x-signature'));

  $client = new Client(['handler' => $handler]);
  $config = new Configuration();
  $config->setHost($this->url);
  
  $this->apiInstance = new Instance($client, $config);
  $this->x_api_key = "your_api_key";
  $this->username = "your_username";
  $this->password = "your_password";
}

NOTA: Los datos de la siguiente petición son solo representativos.

<?php
public function testGetVantageAportantes(){
    try {
        $request = new AportantesPeticion();
        $tipoContrato = new CatalogoContrato();

        $request->setFolio("0000001");
        $request->setTipoContrato($tipoContrato::TC);
        $request->setNumeroCuenta("4772133042201399");
        $request->setDiasAtraso(1);
        $result = $this->apiInstance->getVantageAportantes($this->x_api_key, $this->username, $this->password, $request);

        if($this->apiInstance->getStatusCode() == 200){
            print_r($result);
        }
    } catch (ApiException $e) {

        if($e->getCode() !== 204){
            echo 'Exception when calling ApiTest->testGetVantageAportantes: ', $e->getMessage(), PHP_EOL;
        }
    }
    $this->assertTrue($this->apiInstance->getStatusCode() == 200);        
}

public function testGetVantageNoAportantes(){
    try {
        $tipoContrato = new CatalogoContrato();
        $catalogoPago = new CatalogoFrecuenciaPago();
        $persona = new PersonaPeticion();
        $domicilio = new DomicilioPeticion();
        $catalogoEstados = new CatalogoEstados();
        $request = new NoAportantesPeticion();
        
        $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("JUAN");
        $persona->setApellidoPaterno("PRUEBA");
        $persona->setApellidoMaterno("SIETE");
        $persona->setFechaNacimiento("1980-01-07");
        $persona->setDomicilio($domicilio);

        $request->setFolio("0000002");
        $request->setTipoProducto("O");
        $request->setTipoContrato($tipoContrato::TC);
        $request->setFrecuenciaPago($catalogoPago::M);
        $request->setDiasAtraso(1);
        $request->setNumeroCuenta("123456");
        $request->setFechaApertura("1990-10-19");
        $request->setSaldoActual(15301);
        $request->setPersona($persona);

        $result = $this->apiInstance->getVantageNoAportantes($this->x_api_key, $this->username, $this->password, $request);

        if($this->apiInstance->getStatusCode() == 200){
            print_r($result);
        }
    } catch (ApiException $e) {

        if($e->getCode() !== 204){
            echo 'Exception when calling ApiTest->testGetVantageNoAportantes: ', $e->getMessage(), PHP_EOL;
        }
    }
    $this->assertTrue($this->apiInstance->getStatusCode() == 200);         
}
?>

Pruebas unitarias

Para ejecutar las pruebas unitarias:

./vendor/bin/phpunit

apihub-cdc/vantage 适用场景与选型建议

apihub-cdc/vantage 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1 次下载、GitHub Stars 达 1, 最近一次更新时间为 2020 年 09 月 07 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「api」 「sdk」 「apihub」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 apihub-cdc/vantage 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 apihub-cdc/vantage 我们能提供哪些服务?
定制开发 / 二次开发

基于 apihub-cdc/vantage 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 9
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2020-09-07