Configuración de Empresa
Configuración de Empresa
Section titled “Configuración de Empresa”Dominio: https://test-api-factura.edw-dev.com
Dominio: https://api-financiero.e-dinky.com
Esta sección documenta los endpoints relacionados con la configuración básica de empresas, incluyendo la gestión de firmas digitales, logotipos corporativos y actualización de información general.
Actualizar Firma Digital
Section titled “Actualizar Firma Digital”Información General
Section titled “Información General”- Endpoint:
PUT /api/v1/companies/update-signature
- Método: PUT
- Autenticación: Bearer Token requerido
- Descripción: Permite actualizar la firma digital de la empresa para la firma electrónica de documentos
Headers Requeridos
Section titled “Headers Requeridos”Authorization: Bearer {token}Content-Type: application/jsonAccept: application/json
Parámetros del Request Body
Section titled “Parámetros del Request Body”Campo | Tipo | Requerido | Descripción |
---|---|---|---|
account_id | string | Sí | ID de la cuenta de la empresa |
password | string | Sí | Contraseña del certificado digital |
signature | string | Sí | Certificado digital en formato base64 |
Ejemplo de Request
Section titled “Ejemplo de Request”{ "account_id": "61247344", "password": "mi_password_seguro", "signature": "MIIiTAIBAzCCIgYGCSqGSIb3DQEHAaCCIfcEgiHzMIIh7zCCBZQGCSqGSIb3DQEHAaCCBYUEggWBMIIFfTCCBXkGCyqGSIb3DQEMCgECoIIE+jCCBPYwKAYKKoZIhvcNAQwBAzAaBBTXW/......"}
Respuesta Exitosa (201 Created)
Section titled “Respuesta Exitosa (201 Created)”{ "message": "Documento creado", "status": "CREATED", "payload": { "uuid": 61247344, "ruc": "0952615177001", "name": "EDWARD REYES VILLON", "commercial_name": "EDWARD REYES VILLON", "matriz_address": "Km 51 vía a la Costa.", "environment": "TEST", "status_process": "processing", "warnings": null, "is_contable": "NO", "currency": "DOLAR", "has_configured": true, "has_mysign": true, "establishments": [] }}
Respuesta de Error (422 Unprocessable Content)
Section titled “Respuesta de Error (422 Unprocessable Content)”{ "message": "El archivo no está en formato base64 válido.", "status": "ERROR", "payload": null, "error": { "signature": [ "El archivo no está en formato base64 válido." ] }}
Ejemplos de Código
Section titled “Ejemplos de Código”curl -X PUT \ {{apiFacEcDev}}/api/v1/companies/update-signature \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {{bearerToken}}' \ -H 'Content-Type: application/json' \ -d '{ "account_id": "61247344", "password": "mi_password_seguro", "signature": "MIIiTAIBAzCCIgYGCSqGSIb3DQEHAaCCIfcEgiHzMIIh7z..."}'
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([ 'Authorization' => 'Bearer ' . $bearerToken, 'Accept' => 'application/json',])->put($apiUrl . '/api/v1/companies/update-signature', [ 'account_id' => '61247344', 'password' => 'mi_password_seguro', 'signature' => $base64Signature]);
$data = $response->json();
const axios = require('axios');
const updateSignature = async () => { try { const response = await axios.put( `${apiUrl}/api/v1/companies/update-signature`, { account_id: '61247344', password: 'mi_password_seguro', signature: base64Signature }, { headers: { 'Authorization': `Bearer ${bearerToken}`, 'Content-Type': 'application/json', 'Accept': 'application/json' } } );
console.log('Firma actualizada:', response.data); } catch (error) { console.error('Error:', error.response.data); }};
Subir Logotipo
Section titled “Subir Logotipo”Información General
Section titled “Información General”- Endpoint:
PUT /api/v1/companies/upload-logo
- Método: PUT
- Autenticación: Bearer Token requerido
- Descripción: Permite subir o actualizar el logotipo corporativo de la empresa
Headers Requeridos
Section titled “Headers Requeridos”Authorization: Bearer {token}Content-Type: application/jsonAccept: application/json
Parámetros del Request Body
Section titled “Parámetros del Request Body”Campo | Tipo | Requerido | Descripción |
---|---|---|---|
account_id | string | Sí | ID de la cuenta de la empresa |
logo | string | Sí | Imagen del logotipo en formato base64 |
Ejemplo de Request
Section titled “Ejemplo de Request”{ "account_id": "61247344", "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="}
Respuesta Exitosa (200 OK)
Section titled “Respuesta Exitosa (200 OK)”{ "message": "Logo actualizado", "status": "UPDATED", "payload": { "route": "http://api-factura.test/api/v1/companies/show-logo/61247344" }}
Ejemplos de Código
Section titled “Ejemplos de Código”curl -X PUT \ {{apiFacEcDev}}/api/v1/companies/upload-logo \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {{bearerToken}}' \ -H 'Content-Type: application/json' \ -d '{ "account_id": "61247344", "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="}'
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([ 'Authorization' => 'Bearer ' . $bearerToken, 'Accept' => 'application/json',])->put($apiUrl . '/api/v1/companies/upload-logo', [ 'account_id' => '61247344', 'logo' => $base64Logo]);
$data = $response->json();
const axios = require('axios');
const uploadLogo = async () => { try { const response = await axios.put( `${apiUrl}/api/v1/companies/upload-logo`, { account_id: '61247344', logo: base64Logo }, { headers: { 'Authorization': `Bearer ${bearerToken}`, 'Content-Type': 'application/json', 'Accept': 'application/json' } } );
console.log('Logo actualizado:', response.data); } catch (error) { console.error('Error:', error.response.data); }};
Actualizar Información de Empresa
Section titled “Actualizar Información de Empresa”Información General
Section titled “Información General”- Endpoint:
PUT /api/v1/companies/update-company
- Método: PUT
- Autenticación: Bearer Token requerido
- Descripción: Permite actualizar la información general de la empresa
Headers Requeridos
Section titled “Headers Requeridos”Authorization: Bearer {token}Content-Type: application/jsonAccept: application/json
Parámetros del Request Body
Section titled “Parámetros del Request Body”Campo | Tipo | Requerido | Descripción |
---|---|---|---|
account_id | string | Sí | ID de la cuenta de la empresa |
name | string | No | Nombre o razón social |
commercial_name | string | No | Nombre comercial |
address | string | No | Dirección de la empresa |
email | string | No | Correo electrónico |
phone | string | No | Teléfono de contacto |
Ejemplo de Request
Section titled “Ejemplo de Request”{ "account_id": "61247344", "name": "EMPRESA ACTUALIZADA S.A.", "commercial_name": "EMPRESA ACTUALIZADA", "address": "Nueva dirección empresarial", "phone": "+593987654321"}
Códigos de Respuesta
Section titled “Códigos de Respuesta”- 200 OK: Logotipo actualizado exitosamente
- 201 Created: Firma digital actualizada exitosamente
- 400 Bad Request: Datos inválidos en la solicitud
- 401 Unauthorized: Token de autorización inválido
- 422 Unprocessable Entity: Error de validación en los datos
Mejores Prácticas
Section titled “Mejores Prácticas”🔐 Seguridad de Certificados
Section titled “🔐 Seguridad de Certificados”- Almacene las contraseñas de certificados de forma segura
- Use conexiones HTTPS para todas las transmisiones
- Valide la integridad del certificado antes del envío
📁 Gestión de Archivos
Section titled “📁 Gestión de Archivos”- Verifique el formato base64 antes del envío
- Limite el tamaño de archivos (logotipos < 2MB)
- Use formatos de imagen estándar (PNG, JPG, SVG)
⚡ Rendimiento
Section titled “⚡ Rendimiento”- Implemente caché para logotipos frecuentemente accedidos
- Use compresión de imágenes para optimizar tamaño
- Considere CDN para distribución de logotipos
🔄 Manejo de Errores
Section titled “🔄 Manejo de Errores”- Implemente reintentos para errores temporales
- Valide datos antes del envío
- Proporcione mensajes de error claros al usuario
Casos de Uso Específicos
Section titled “Casos de Uso Específicos”📋 Configuración Inicial
Section titled “📋 Configuración Inicial”// Flujo completo de configuraciónconst configureCompany = async (companyData) => { try { // 1. Actualizar información básica await updateCompanyInfo(companyData.basicInfo);
// 2. Subir logotipo await uploadLogo(companyData.logo);
// 3. Configurar firma digital await updateSignature(companyData.signature);
console.log('Configuración completada exitosamente'); } catch (error) { console.error('Error en configuración:', error); }};
🔄 Actualización Masiva
Section titled “🔄 Actualización Masiva”// Actualización de múltiples empresasforeach ($companies as $company) { try { $this->updateCompanyConfiguration($company); Log::info("Empresa {$company['name']} actualizada"); } catch (Exception $e) { Log::error("Error actualizando {$company['name']}: {$e->getMessage()}"); }}
Notas Importantes
Section titled “Notas Importantes”- Certificados Digitales: Deben estar en formato PKCS#12 (.p12) convertido a base64
- Logotipos: Se recomienda usar imágenes cuadradas de al menos 200x200 píxeles
- Validaciones: Todos los campos son validados según estándares ecuatorianos
- Caché: Los logotipos se almacenan en caché para mejorar rendimiento
- Auditoría: Todas las actualizaciones quedan registradas en logs del sistema