Saltar a contenido

Inicio Rápido

Para una integración más amigable, se muestran ejemplos de consumo a la API mediante algunos lenguajes de programación.

Buscar Certificados por RFC

# Configuración de credenciales (BASE64: usuario:contraseña)
USER="tu_usuario"
PASS="tu_contraseña"
CREDS=$(echo -n "$USER:$PASS" | base64)

# Todos los certificados de un RFC
curl -H "Authorization: Basic $CREDS" http://localhost:8080/by-rfc/XAXX010101000

# Solo certificados vigentes
curl -H "Authorization: Basic $CREDS" "http://localhost:8080/by-rfc/XAXX010101000?status=vigente"

# Solo certificados de tipo CSD vigentes
curl -H "Authorization: Basic $CREDS" "http://localhost:8080/by-rfc/XAXX010101000?status=vigente&type=CSD"

# Solo certificados de tipo e.firma
curl -H "Authorization: Basic $CREDS" "http://localhost:8080/by-rfc/XAXX010101000?type=e.firma"
<?php
$curl = curl_init();

// Credenciales de contratación
$usuario = "tu_usuario";
$contraseña = "tu_contraseña";
$auth = base64_encode("{$usuario}:{$contraseña}");

// Búsqueda con filtros
$rfc = "XAXX010101000";
$status = "vigente"; // opcional: vigente, vencido, revocado
$type = "CSD";       // opcional: e.firma, CSD

$url = "http://localhost:8080/by-rfc/{$rfc}";
if ($status) {
    $url .= "?status={$status}";
}
if ($type) {
    $url .= ($status ? "&" : "?") . "type={$type}";
}

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "Accept: application/json",
        "Content-Type: application/json",
        "Authorization: Basic {$auth}",
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    $data = json_decode($response, true);
    echo "Total de certificados: " . $data['count'] . "\n";
    foreach ($data['certificates'] as $cert) {
        echo "Serial: " . $cert['serial_number'] . "\n";
        echo "Tipo: " . $cert['type'] . "\n";
        echo "Estado: " . $cert['status'] . "\n";
    }
}
?>
import requests
import json
from requests.auth import HTTPBasicAuth

# Configuración
base_url = "http://localhost:8080"
rfc = "XAXX010101000"
usuario = "tu_usuario"
contraseña = "tu_contraseña"

# Autenticación HTTP Basic
auth = HTTPBasicAuth(usuario, contraseña)

# Búsqueda simple
response = requests.get(f"{base_url}/by-rfc/{rfc}", auth=auth)
data = response.json()

if response.status_code == 200:
    print(f"Total de certificados encontrados: {data['count']}")
    for cert in data['certificates']:
        print(f"  - Serial: {cert['serial_number']}")
        print(f"    Tipo: {cert['type']}")
        print(f"    Estado: {cert['status']}")
else:
    print(f"Error: {data['error']['message']}")

# Búsqueda con filtros
params = {
    'status': 'vigente',
    'type': 'CSD'
}
response = requests.get(f"{base_url}/by-rfc/{rfc}", params=params, auth=auth)
data = response.json()
const baseUrl = "http://localhost:8080";
const rfc = "XAXX010101000";
const usuario = "tu_usuario";
const contraseña = "tu_contraseña";

// Codificar credenciales en Base64
const credentials = btoa(`${usuario}:${contraseña}`);

// Búsqueda simple
fetch(`${baseUrl}/by-rfc/${rfc}`, {
    headers: {
        'Authorization': `Basic ${credentials}`
    }
})
    .then(response => response.json())
    .then(data => {
        console.log(`Total de certificados: ${data.count}`);
        data.certificates.forEach(cert => {
            console.log(`Serial: ${cert.serial_number}`);
            console.log(`Tipo: ${cert.type}`);
            console.log(`Estado: ${cert.status}`);
        });
    })
    .catch(error => console.error('Error:', error));

// Búsqueda con filtros
const params = new URLSearchParams({
    status: 'vigente',
    type: 'CSD'
});

fetch(`${baseUrl}/by-rfc/${rfc}?${params}`, {
    headers: {
        'Authorization': `Basic ${credentials}`
    }
})
    .then(response => response.json())
    .then(data => console.log(data));
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;

class Program
{
    static async Task Main()
    {
        var client = new HttpClient();
        var baseUrl = "http://localhost:8080";
        var rfc = "XAXX010101000";
        var usuario = "tu_usuario";
        var contraseña = "tu_contraseña";

        // Autenticación HTTP Basic
        var credentials = Convert.ToBase64String(
            System.Text.Encoding.ASCII.GetBytes($"{usuario}:{contraseña}")
        );
        client.DefaultRequestHeaders.Authorization = 
            new AuthenticationHeaderValue("Basic", credentials);

        // Búsqueda simple
        var response = await client.GetAsync($"{baseUrl}/by-rfc/{rfc}");
        var content = await response.Content.ReadAsStringAsync();
        var data = JsonConvert.DeserializeObject<dynamic>(content);

        if (response.IsSuccessStatusCode)
        {
            Console.WriteLine($"Total de certificados: {data["count"]}");
            foreach (var cert in data["certificates"])
            {
                Console.WriteLine($"Serial: {cert["serial_number"]}");
                Console.WriteLine($"Tipo: {cert["type"]}");
                Console.WriteLine($"Estado: {cert["status"]}");
            }
        }
        else
        {
            Console.WriteLine($"Error: {data["error"]["message"]}");
        }
    }
}

Respuesta Exitosa

Una consulta exitosa retorna un objeto JSON con la siguiente estructura:

{
  "rfc": "XAXX010101000",
  "count": 2,
  "certificates": [
    {
      "rfc": "XAXX010101000",
      "serial_number": "00001000000500000001",
      "type": "CSD",
      "status": "vigente",
      "subject_name": "NOMBRE DEL CONTRIBUYENTE",
      "issuer": "",
      "valid_from": "2023-01-15T00:00:00+00:00",
      "valid_to": "2027-01-15T00:00:00+00:00",
      "email": null,
      "certificate_url": "/RecuperacionDeCertificados/...",
      "is_valid": true
    },
    {
      "rfc": "XAXX010101000",
      "serial_number": "00001000000500000002",
      "type": "e.firma",
      "status": "vigente",
      "subject_name": "NOMBRE DEL CONTRIBUYENTE",
      "issuer": "",
      "valid_from": "2022-06-10T00:00:00+00:00",
      "valid_to": "2026-06-10T00:00:00+00:00",
      "email": "usuario@empresa.com",
      "certificate_url": "/RecuperacionDeCertificados/...",
      "is_valid": true
    }
  ]
}

Manejo de Errores

Si la solicitud genera un error, la API retorna un objeto con la siguiente estructura:

{
  "error": {
    "message": "No certificates found for RFC: XAXX010101000"
  }
}

Consulta la sección de Referencia para conocer todos los códigos de error posibles.