Repository navigation
FEAT: v5.0.0 modernization - PHP 8.2+, strictly typed DTOs, enums & AI-ready DX - #60
Draft
macarthuror wants to merge 46 commits into
Draft
macarthuror wants to merge 46 commits into
macarthuror wants to merge 46 commits into
Conversation
…try/catch (Fase 4)
- Eliminado alias obsoleto Facturapi_Exception.php - Creadas excepciones específicas (Validation, Authentication, NotFound, RateLimit, Server, Network) - FacturapiHttpClient ahora lanza excepciones específicas según el status code y mapea ClientExceptionInterface a NetworkException
…etornar array (Fase 6)
…"Corrige el método previewToInvoicePdf para usar POST en lugar de GET. Corrige manejo de nulos en Retentions::sendByEmail. Añade pruebas CRUD y de simulación de payload completo.
Añade métodos y query parameters faltantes en Customers y TaxIdValidationResult. Agrega un test exhaustivo con payload completo para Invoices.
Implementa las pruebas base de las organizaciones (creación, edición de dominios y legales) y las operaciones de Webhooks, cubriendo los requerimientos del plan.
Corrige omisiones de query parameters en los catálogos del SAT, CartaPorte, ComercioExterior y Nómina. Añade el endpoint check en Tools.
…ientas Se completan las pruebas de todos los catálogos satelitales verificando el parseo de los parámetros en la URL.
Se añade Makefile con comandos útiles como test, test-coverage e install.
Actualiza versión de Guzzle, agrega autores en composer.json y elimina example.php.
…ses and endpoints
Author
|
Como parte de nuestro proceso de validación, nos encontramos desplegando esta versión en nuestros entornos de Staging/QA sobre un proyecto real de producción, asegurando que cumpla con todos los controles operativos antes de su adopción definitiva. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Propuesta para Facturapi PHP SDK v5.0.0:
Modernización Integral, Tipado Estricto y Experiencia de Desarrollo Lista para IA
Hola equipo de Facturapi,
Primero que nada, muchas gracias por su trabajo con Facturapi y su SDK oficial de PHP.
Desde la publicación de las versiones 4.x del SDK de Facturapi, el ecosistema de PHP ha dado un salto cualitativo gigantesco (adopción masiva de PHP 8.2+, Enums nativos, tipos de retorno estrictos, estándares PSR-18 y análisis estático riguroso).
Al mismo tiempo, el flujo de trabajo moderno de desarrollo ha cambiado radicalmente: hoy en día, una gran parte de los desarrolladores construyen integraciones asistidos por Inteligencia Artificial y Coding Agents (Cursor, GitHub Copilot, Claude Code, Antigravity, etc.).
Con esto en mente, hemos preparado esta propuesta integral para evolucionar el SDK a la versión 5.0.0, rediseñando su arquitectura para que sea:
\ArrayAccessen DTOs comunes).🤝 Propuesta de Colaboración y Siguientes Pasos
Somos conscientes de que este es un Pull Request de gran escala (+22,000 líneas entre nuevos DTOs, Enums y tests). La intención es sumar al proyecto y brindar a los desarrolladores de PHP la mejor experiencia posible al facturar con Facturapi.
Estamos a su entera disposición para:
v5.0onext) para pruebas beta de la comunidad.¡Esperamos que esta propuesta sea de gran valor para Facturapi y para toda la comunidad de desarrolladores en México!
Con aprecio,
Arturo Ortega (@macarthuror) & el equipo de INCREDE (@Increde)
Principales Ventajas de la Versión 5.0
1. Diseñado para un Mundo de Desarrollo Asistido por IA
Cuando los desarrolladores o asistentes de IA interactúan con APIs complejas como CFDI 4.0 mediante arreglos asociativos sin esquema tipado, surgen problemas comunes:
En v5.0:
src/Models/) generados directamente desde la especificación OpenAPI oficial de Facturapi.PaymentForm,TaxType, etc.).Problematica Actual
payment_typeen lugar depayment_form).2. Experiencia de Desarrollo (DX) e IntelliSense en el IDE
Para no tener que estar consultando continuamente la documentación para saber qué campo viene en la respuesta o lidiar con errores.
3. Retrocompatibilidad Estratégica (
\ArrayAccess)Entendemos el impacto de un cambio mayor en código en producción. Por ello, hemos implementado
\ArrayAccessen DTOs anidados frecuentes (como direcciones enCommonAddressProperties):Además, los métodos que reciben catálogos aceptan tanto instancias de los nuevos Enums como strings crudos para no obligar a una refactorización masiva de payloads existentes:
4. Cliente HTTP Desacoplado (Estándares PSR-18 y PSR-17)
En v4, el SDK estaba estrictamente amarrado a una versión fija de Guzzle. En v5:
php-http/discoverypara detectar automáticamente cualquier cliente HTTP PSR-18 disponible en el proyecto (Guzzle 7/8, Symfony HttpClient, Buzz, etc.).5. Arquitectura Stateless y Compatibilidad con Servidores Modernos
El SDK es 100% libre de estado compartido entre peticiones:
Facturapipuede registrarse de forma segura como un Singleton en contenedores de inyección de dependencias sin riesgo de fugas de memoria o fuga de datos entre inquilinos (cross-tenant bleed).6. Jerarquía Granular de Excepciones Semánticas
Se reemplazó el lanzamiento genérico de
\Exceptionpor una jerarquía basada enFacturapiException, donde cada error HTTP o de transporte tiene su propia clase tipada:ValidationException(HTTP 400 y 422 - Errores de validación de datos, formato o reglas del SAT)AuthenticationException(HTTP 401 y 403 - API key faltante/inválida o permisos insuficientes)NotFoundException(HTTP 404 - El recurso solicitado no existe)RateLimitException(HTTP 429 - Límite de peticiones a la API excedido)ServerException(HTTP 500+ - Errores internos de infraestructura de Facturapi)NetworkException(Fallas de transporte y conectividad de red a nivel PSR-18)Además, la clase base
FacturapiExceptionexpone métodos de conveniencia para diagnosticar problemas rápidamente:$e->getStatusCode(): Código HTTP de respuesta.$e->getErrors(): Lista de errores devueltos por la API del SAT/Facturapi.$e->getErrorCode(),$e->getErrorPath(),$e->getErrorLocation(): Detalles precisos del campo erróneo.$e->getLogId(): Identificador únicox-facturapi-log-idpara rastrear peticiones con soporte técnico.$e->getRawBody()y$e->getResponseHeaders(): Payload crudo y cabeceras completas recibidas.Esto permite a las aplicaciones capturar y reaccionar ante errores específicos de negocio con máxima precisión:
7. Suite de Pruebas Moderna (Pest v3) y PHPStan Nivel 9
Para garantizar total estabilidad y confianza al migrar:
Comparativa Rápida de Sintaxis (v4 vs v5)
$facturapi->Invoices(Propiedad mágica)$facturapi->invoices()(Método explícito y tipado)stdClasso arreglos genéricosInvoice,Customer, etc.)'01','I')PaymentForm::EFECTIVO) o stringsphp-http/discovery)\ExceptiongenéricaBadRequestException, etc.)Documentación y Recursos Adicionales Incluidos
Guías Oficiales para Frameworks:
Guía para Agentes de IA (
AGENTS.md): Contexto y directrices de arquitectura diseñadas para que Cursor, Copilot o modelos de IA implementen Facturapi siguiendo las mejores prácticas del SDK.Distribución Standalone: Script de empaquetado para generar el archivo
facturapi-php-standalone.zipcon autoloader incluido para desarrolladores que no utilizan Composer.Skill para desarrollo del SDK: Se creo una skill para ayudar a mantener y desarrollar este SDK con ayuda de IA.