Plugin de WordPress/WooCommerce que integra el sistema contable y de facturación Alegra con WooCommerce. Permite crear y emitir facturas electrónicas colombianas (DIAN) directamente desde el panel de administración de WooCommerce.
- Versión: 0.0.15
- PHP requerido: >= 8.1
- WordPress: >= 6.0
- WooCommerce: >= 9.6
- Licencia: GPL v3.0
- Autor: Saúl Morales Pacheco
integration-alegra-woo.php # Punto de entrada del plugin
includes/
class-integration-alegra-wc-plugin.php # Bootstrapping, hooks, acciones WP/WC
class-alegra-integration-wc.php # Configuración WC_Integration (settings)
class-integration-alegra-wc.php # Lógica de negocio (facturas, clientes, productos)
admin/
settings.php # Campos de configuración principales (credenciales)
other_settings.php # Campos adicionales (vendedor, impuestos, centro de costo)
lib/
src/Client.php # Cliente HTTP para la API de Alegra (Guzzle)
vendor/ # Dependencias del cliente Alegra
plugin-update-checker/ # Auto-actualización desde GitHub releases
assets/js/
field-dni-checkout.js # Validación de DNI en checkout frontend
integration-alegra.js # Botón "Ver Factura" en admin (SweetAlert2)
sweetalert2.min.js # Librería SweetAlert2
tests/
bootstrap.php # Bootstrap PHPUnit con WP test framework
test-integration-alegra-wc.php # Tests de calculate_dv
test-invoice-generation.php # Tests de generación de facturas
test-client-management.php # Tests de gestión de clientes
wp-config.php # Config de BD para tests
integration-alegra-woo.php→ hookplugins_loaded→integration_alegra_wc_smp_init()- Verifica requisitos PHP >= 8.1
- Instancia singleton
Integration_Alegra_WC_Plugin→run_alegra()→run() - Carga autoloader, registra
WC_Alegra_Integrationcomo integración WC - Registra todos los hooks y filtros de WordPress/WooCommerce
| Clase | Responsabilidad |
|---|---|
Integration_Alegra_WC_Plugin |
Bootstrap, registro de hooks, enqueue de scripts, acciones bulk, campos checkout |
WC_Alegra_Integration |
Extiende WC_Integration — maneja la página de configuración en WooCommerce |
Integration_Alegra_WC |
Lógica estática de negocio: facturación, sincronización de productos, gestión de clientes |
Saulmoralespa\Alegra\Client |
Cliente HTTP para API REST de Alegra v1 |
- Cambio de estado de pedido →
generate_invoice()(hookwoocommerce_order_status_changed) - Valida: integración habilitada, estado coincide con configuración, no existe factura previa
- Obtiene DNI y tipo de documento del pedido (checkout blocks o clásico)
- Busca o crea contacto en Alegra
- Por cada item del pedido: busca o crea producto en Alegra por SKU
- Si hay envío: crea item de servicio con SKU
S-P-W - Crea factura con vendedor, centro de costo, impuestos configurados
- Guarda
_invoice_id_alegracomo meta del pedido
- Acción bulk en listado de pedidos: "Emitir facturas Alegra"
- Máximo 10 facturas por lote (
MAX_INVOICES_TO_STAMP) - Llama a
stampInvoices()de la API de Alegra - Marca pedidos con
_invoice_emit_alegraal confirmar
Base URL: https://api.alegra.com/api/v1/
Autenticación: HTTP Basic Auth (email + token)
| Método | Endpoint | Uso |
|---|---|---|
| GET | /invoices/{id} |
Obtener factura / PDF |
| POST | /invoices |
Crear factura |
| POST | /invoices/stamp |
Timbrar facturas (DIAN) |
| GET | /contacts |
Buscar contacto por identificación |
| POST | /contacts |
Crear contacto |
| GET | /items |
Buscar producto por referencia/SKU |
| POST | /items |
Crear producto |
| PUT | /items/{id} |
Editar producto |
| GET | /sellers |
Listar vendedores |
| GET | /cost-centers |
Listar centros de costo |
| GET | /taxes |
Listar impuestos |
El plugin registra campos adicionales en el checkout de WooCommerce:
- Tipo de documento (
document/type_document): select con opciones CC, NIT, CE, DIE, TE, PP, TI, RC, FOREIGN_NIT - Número de documento (
document/dni): campo numérico, patrón[0-9]{5,12}
Compatible con checkout clásico y checkout por bloques de WooCommerce.
_billing_type_document/_shipping_type_document_billing_dni/_shipping_dni_invoice_id_alegra— ID de factura en Alegra_invoice_emit_alegra— Flag de factura timbrada en DIAN
Ruta admin: WooCommerce → Ajustes → Integración → Integration Alegra Woocommerce
enabled: Activar/Desactivar integracióndebug: Modo depuración (logs en WooCommerce → Estado)user: Email de cuenta Alegratoken: Token API de Alegra (se valida contra la API al guardar)
order_status_generate_invoice: Estado del pedido que dispara la facturastatus_generate_invoice: Estado de la factura en Alegra (borrador/abierto)seller_generate_invoice: Vendedor asociado (requerido)cost_center_generate_invoice: Centro de costo (opcional)tax: IVA aplicado a productosshipping_tax: IVA aplicado al envío
allow_create_clients: Crear clientes automáticamente en Alegraallow_create_products: Crear productos automáticamente en Alegradni_field: Meta key personalizada para campo DNI (default:_billing_dni)
- PHPUnit 9.x
- WordPress test framework (
wp-phpunit) - MySQL/MariaDB
- WooCommerce instalado como plugin hermano
make test # Todos los tests
make test-calculate-dv # Tests de cálculo DV
make test-invoice # Tests de generación de facturas
make test-client # Tests de gestión de clientes- Test_Integration_Alegra_WC: Validación del cálculo del dígito de verificación (DV) para NITs colombianos
- Test_Invoice_Generation: Generación de facturas (estados, duplicados, validaciones)
- Test_Client_Management: Construcción de datos de contacto, extracción de DV, manejo de tipos de documento
# Configurar variable de entorno
export WP_TEST__DIR=/ruta/al/directorio/wp-tests
# Ejecutar
vendor/bin/phpunit --testdox- tests.yml: Ejecuta tests en push/PR a
main(PHP 8.1, MySQL 5.7) - release.yml: Crea release en GitHub al pushear tags
v*
composer phpcs # WordPress Coding Standards check
composer phpcbf # Auto-fix
composer phpcs-check # Solo directorio includes/Configuración en phpcs.xml. Prefijos globales requeridos: integration_alegra / Integration_Alegra.
- Namespaces: Solo la librería client usa namespace (
Saulmoralespa\Alegra). Las clases del plugin son globales - Métodos estáticos:
Integration_Alegra_WCusa exclusivamente métodos estáticos - Singleton:
Integration_Alegra_WC_Pluginse instancia una sola vez viaintegration_alegra_wc_smp() - Logging: Usar
integration_alegra_wc_smp()->log($message, $level)— escribe en logs de WooCommerce con sourceintegration-alegra - Settings: Se almacenan en
wp_optionscon keywoocommerce_wc_alegra_integration_settings - Sanitización: Inputs via
sanitize_text_field(), nonces conwp_verify_nonce() - Compatibilidad HPOS: Declarada via
FeaturesUtil::declare_compatibility('custom_order_tables')
El plugin usa plugin-update-checker para actualizarse desde GitHub releases del repositorio saulmoralespa/integration-alegra-woo (rama main).