Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 62 additions & 75 deletions README.md
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,17 @@ La API de FICO Score determina la probabilidad de incumplimiento de un acreditad
## 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

```sh
#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
```
- Composer [vea como instalar][1]

## Instalación

Ejecutar: `composer install`
Expand All @@ -27,8 +24,9 @@ Ejecutar: `composer install`
### 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.
- En caso de no contar con uno, ejecutar las instrucciones contenidas en **lib/Interceptor/key_pair_gen.sh** o con los siguientes comandos.

**Opcional**: Para cifrar el contenedor, colocar una contraseña en una variable de ambiente.
```sh
export KEY_PASSWORD=your_password
```
Expand All @@ -44,7 +42,6 @@ export ALIAS=circulo_de_credito
```sh
#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} \
Expand All @@ -61,131 +58,121 @@ openssl pkcs12 -name ${ALIAS} \
-in ${CERTIFICATE_FILE} -password pass:${KEY_PASSWORD}
```

### Paso 2. Carga del certificado dentro del portal de desarrolladores
### Paso 2. Cargar el 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**".
<p align="center">
<img src="https://github.com/APIHub-CdC/imagenes-cdc/blob/master/applications.png">
</p>
5. Al abrirse la ventana emergente, seleccionar el certificado previamente creado y dar clic en el botón "**Cargar**":
5. Al abrirse la ventana, seleccionar el certificado previamente creado y dar clic en el botón "**Cargar**":
<p align="center">
<img src="https://github.com/APIHub-CdC/imagenes-cdc/blob/master/upload_cert.png" width="268">
<img src="https://github.com/APIHub-CdC/imagenes-cdc/blob/master/upload_cert.png">
</p>

### Paso 3. Descarga del certificado de Círculo de Crédito dentro del portal de desarrolladores
### Paso 3. Descargar el 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**".
<p align="center">
<img src="https://github.com/APIHub-CdC/imagenes-cdc/blob/master/applications.png">
</p>
5. Al abrirse la ventana emergente, dar clic al botón "**Descargar**":
5. Al abrirse la ventana, dar clic al botón "**Descargar**":
<p align="center">
<img src="https://github.com/APIHub-CdC/imagenes-cdc/blob/master/download_cert.png" width="268">
<img src="https://github.com/APIHub-CdC/imagenes-cdc/blob/master/download_cert.png">
</p>

> 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:
> 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:

```php
/**
* Esto es parte del setUp() de las pruebas unitarias.
*/
$password = getenv('KEY_PASSWORD');
$this->signer = new \FicoscoreV2\Client\Interceptor\KeyHandler(
$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. Capturar los datos de la petición
> **NOTA:** Solamente en caso de que el contenedor se haya cifrado, debe colocarse 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 y credenciales

Los siguientes datos a modificar se encuentran en ***test/Api/FICOScoreApiTest.php***

Es importante contar con el setUp() que se encargará de inicializar la url, firmar y verificar la petición. Modificar la URL de la petición del objeto ***$config***, como se muestra en el siguiente fragmento de código:
Modificar la URL y las credenciales de acceso a la petición en ***test/Api/ApiTest.php***, como se muestra en el siguiente fragmento de código:

```php
<?php
public function setUp()
{
$password = getenv('KEY_PASSWORD');

$this->signer = new \FicoscoreV2\Client\Interceptor\KeyHandler(null, null, $password);

$events = new \FicoscoreV2\Client\Interceptor\MiddlewareEvents($this->signer);
$handler = \GuzzleHttp\HandlerStack::create();
$handler->push($events->add_signature_header('x-signature'));
$handler->push($events->verify_signature_header('x-signature'));

$client = new \GuzzleHttp\Client(['handler' => $handler, 'verify' => false]);
$config = new \FicoscoreV2\Client\Configuration();
$config->setHost('the_url');
$password = getenv('KEY_PASSWORD');
$this->signer = new KeyHandler(null, null, $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('the_url');

$this->apiInstance = new Instance($client, $config);
$this->x_api_key = "your_api_key";
$this->username = "your_username";
$this->password = "your_password";
}
```

### 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.

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

$this->apiInstance = new \FicoscoreV2\Client\Api\FICOScoreApi($client,$config);
}
```
```php
public function testGetReporte() {

<?php
/**
* Este es el método que se será ejecutado en la prueba ubicado en path/to/repository/test/Api/FICOScoreApiTest.php

*/
public function testGetReporte()
{
$x_api_key = "your_api_key";
$username = "your_username";
$password = "your_password";
$request = new Peticion();
$persona = new Persona();
$domicilio = new Domicilio();
$estado = new CatalogoEstados();

$request->setFolio("00000001");

$request = new \FicoscoreV2\Client\Model\Peticion();
$persona->setNombres("JUAN");
$persona->setApellidoPaterno("PRUEBA");
$persona->setApellidoMaterno("SIETE");
$persona->setFechaNacimiento("1980-01-07");
$persona->setRFC("PUAC800107");

$request->setFolio("XXXXXX");
$domicilio->setDireccion("INSURGENTES SUR 1001");
$domicilio->setColoniaPoblacion("INSURGENTES SUR");
$domicilio->setCiudad("CIUDAD DE MEXICO");
$domicilio->setDelegacionMunicipio("CIUDAD DE MEXICO");
$domicilio->setEstado($estado::DF);
$domicilio->setCP("11230");

$persona = new \FicoscoreV2\Client\Model\Persona();
$persona->setNombres("XXXXXX");
$persona->setApellidoPaterno("XXXXXX");
$persona->setApellidoMaterno("XXXXXX");
$persona->setFechaNacimiento("DD-MM-YYYY");
$persona->setRFC("XXXXXX");
$persona->setDomicilio($domicilio);

$domicilio = new \FicoscoreV2\Client\Model\Domicilio();
$domicilio->setDireccion("XXXXXX");
$domicilio->setColoniaPoblacion("XXXXXX");
$domicilio->setCiudad("XXXXXX");
$domicilio->setCP("XXXXXX");
$domicilio->setDelegacionMunicipio("XXXXXX");
$domicilio->setEstado("XXXXXX");

$persona->setDomicilio($domicilio);

$request->setPersona($persona);
$request->setPersona($persona);

try {
$result = $this->apiInstance->getReporte($x_api_key, $username, $password, $request);
$result = $this->apiInstance->getReporte($this->x_api_key, $this->username, $this->password, $request);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling ApiTest->getReporte: ', $e->getMessage(), PHP_EOL;
}
}
?>
```

## Pruebas unitarias

Para ejecutar las pruebas unitarias:

```sh
./vendor/bin/phpunit
```

[1]: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos
16 changes: 12 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "apihub-cdc/ficoscore-v2",
"name": "apihub-cdc/ficoscore-client",
"description": "",
"keywords": [
"apihub",
Expand All @@ -8,23 +8,31 @@
"api"
],
"homepage": "http://developer.circulodecredito.com.mx",
"license": "proprietary",
"authors": [
{
"name": "APIHub and contributors",
"homepage": "https://github.com/APIHub-CdC"
}
],
"require": {
"php": ">=5.5",
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"guzzlehttp/guzzle": "^6.2",
"monolog/monolog": "^1.24"
"monolog/monolog": "^1.24",
"apihub-cdc/signature-manager": "^1.0.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8",
"squizlabs/php_codesniffer": "~2.6",
"friendsofphp/php-cs-fixer": "~2.12"
},
"autoload": {
"psr-4": { "FicoscoreV2\\Client\\" : "lib/" }
"psr-4": { "FS\\MX\\Client\\" : "lib/" }
},
"autoload-dev": {
"psr-4": { "FicoscoreV2\\Client\\" : "test/" }
"psr-4": { "FS\\MX\\Client\\" : "test/" }
}
}
30 changes: 15 additions & 15 deletions lib/Api/FICOScoreApi.php → lib/Api/FSApi.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
<?php

namespace FicoscoreV2\Client\Api;
namespace FS\MX\Client\Api;

use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Psr7\MultipartStream;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\RequestOptions;
use FicoscoreV2\Client\ApiException;
use FicoscoreV2\Client\Configuration;
use FicoscoreV2\Client\HeaderSelector;
use FicoscoreV2\Client\ObjectSerializer;
use FS\MX\Client\ApiException;
use FS\MX\Client\Configuration;
use FS\MX\Client\HeaderSelector;
use FS\MX\Client\ObjectSerializer;

class FICOScoreApi
class FSApi
{

protected $client;
Expand Down Expand Up @@ -45,7 +45,7 @@ public function getReporte($x_api_key, $username, $password, $body)

public function getReporteWithHttpInfo($x_api_key, $username, $password, $body)
{
$returnType = '\FicoscoreV2\Client\Model\Respuesta';
$returnType = '\FS\MX\Client\Model\Respuesta';
$request = $this->getReporteRequest($x_api_key, $username, $password, $body);
try {
$options = $this->createHttpClientOption();
Expand Down Expand Up @@ -91,55 +91,55 @@ public function getReporteWithHttpInfo($x_api_key, $username, $password, $body)
case 200:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Respuesta',
'\FS\MX\Client\Model\Respuesta',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
case 400:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Errores',
'\FS\MX\Client\Model\Errores',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
case 401:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Errores',
'\FS\MX\Client\Model\Errores',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
case 403:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Errores',
'\FS\MX\Client\Model\Errores',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
case 404:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Errores',
'\FS\MX\Client\Model\Errores',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
case 429:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Errores',
'\FS\MX\Client\Model\Errores',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
case 500:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\FicoscoreV2\Client\Model\Errores',
'\FS\MX\Client\Model\Errores',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
Expand All @@ -161,7 +161,7 @@ function ($response) {

public function getReporteAsyncWithHttpInfo($x_api_key, $username, $password, $body)
{
$returnType = '\FicoscoreV2\Client\Model\Respuesta';
$returnType = '\FS\MX\Client\Model\Respuesta';
$request = $this->getReporteRequest($x_api_key, $username, $password, $body);
return $this->client
->sendAsync($request, $this->createHttpClientOption())
Expand Down
2 changes: 1 addition & 1 deletion lib/ApiException.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace FicoscoreV2\Client;
namespace FS\MX\Client;

use \Exception;

Expand Down
Loading
Loading