enlace2 / laravel-url-shortener
Laravel package for Enlace2 URL shortener service integration - Complete API wrapper with support for links, QR codes, campaigns, channels, domains, pixels, and overlays
Fund package maintenance!
RenatoAscencio
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/enlace2/laravel-url-shortener
Requires
- php: ^8.1|^8.2|^8.3
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^7.0|^8.0|^9.0|^10.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.0|^10.0|^11.0
- squizlabs/php_codesniffer: ^3.7
README
Un package completo de Laravel para integrar fácilmente el servicio de acortamiento de URLs de Enlace2 en tus aplicaciones Laravel. Incluye soporte completo para todos los endpoints de la API de Enlace2: acortamiento de URLs, códigos QR, campañas, canales, dominios de marca, píxeles de seguimiento y superposiciones CTA.
🚀 Características Principales
- ✅ 100% Cobertura de API: Todos los endpoints de Enlace2 implementados
- ✅ 7 Servicios Completos: Links, QR, Campaigns, Channels, Domains, Pixels, Overlays
- ✅ Acortamiento de URLs con opciones personalizadas
- ✅ Códigos QR dinámicos y personalizables
- ✅ Campañas para organizar tus enlaces
- ✅ Canales para segmentación avanzada
- ✅ Dominios de Marca para URLs personalizadas
- ✅ Píxeles de Seguimiento para analytics
- ✅ Superposiciones CTA para conversiones
- ✅ Geo-targeting y Device targeting
- ✅ Protección con contraseña y fechas de expiración
- ✅ Tracking detallado de clicks y estadísticas
- ✅ Manejo robusto de errores y rate limiting
- ✅ Facade de Laravel para fácil uso
- ✅ Configuración flexible
- ✅ Tests completos (30+ tests)
📋 Requisitos
- PHP: 8.1, 8.2, 8.3+
- Laravel: 9.x, 10.x, 11.x, 12.x
- Extensiones PHP: cURL, JSON, mbstring
📦 Instalación
Puedes instalar el package vía Composer:
composer require enlace2/laravel-url-shortener
El package se auto-registra automáticamente en Laravel 5.5+.
⚙️ Configuración
- Publica el archivo de configuración:
php artisan vendor:publish --provider="Enlace2\LaravelUrlShortener\Enlace2ServiceProvider"
- Agrega tu API key de Enlace2 en tu archivo
.env
:
ENLACE2_API_KEY=tu_api_key_aqui
Puedes obtener tu API key registrándote en Enlace2.com y accediendo a tu dashboard.
🎯 Uso Básico
Usando la Facade
use Enlace2\LaravelUrlShortener\Facades\Enlace2; // Acortar una URL $result = Enlace2::links()->shorten('https://example.com'); echo $result['short']; // https://enlace2.com/abc123 // Acortar con opciones adicionales $result = Enlace2::links()->shorten('https://example.com', [ 'custom' => 'mi-enlace-personalizado', 'password' => 'mi-password', 'expiry' => '2024-12-31 23:59:59' ]);
Usando Inyección de Dependencias
use Enlace2\LaravelUrlShortener\Services\Enlace2Client; class MiControlador extends Controller { public function acortarUrl(Enlace2Client $enlace2) { $resultado = $enlace2->links()->shorten('https://example.com'); return response()->json($resultado); } }
📚 Documentación Completa de Servicios
🔗 Servicio de Enlaces (Links)
El servicio de enlaces te permite crear, gestionar y rastrear URLs acortadas.
Métodos Disponibles
// Obtener todos los enlaces $links = Enlace2::links()->all(); // Obtener un enlace específico $link = Enlace2::links()->get($id); // Crear/acortar un enlace $result = Enlace2::links()->shorten('https://example.com', [ 'custom' => 'mi-enlace', // Alias personalizado 'password' => 'password123', // Protección con contraseña 'expiry' => '2024-12-31 23:59:59', // Fecha de expiración 'title' => 'Mi Enlace', // Título del enlace 'description' => 'Descripción', // Descripción 'domain' => 'https://mi-dominio.com' // Dominio personalizado ]); // Actualizar un enlace $updated = Enlace2::links()->update($id, [ 'url' => 'https://nueva-url.com', 'title' => 'Nuevo título' ]); // Eliminar un enlace Enlace2::links()->delete($id);
Endpoints Utilizados
GET /api/urls
- Listar enlacesGET /api/link/{id}
- Obtener enlace específicoPOST /api/url/add
- Crear/acortar enlacePUT /api/link/{id}/update
- Actualizar enlaceDELETE /api/link/{id}/delete
- Eliminar enlace
📱 Servicio de Códigos QR
Crea y gestiona códigos QR dinámicos para tus enlaces.
Métodos Disponibles
// Obtener todos los códigos QR $qrCodes = Enlace2::qr()->all(); // Obtener un código QR específico $qr = Enlace2::qr()->get($id); // Crear un código QR $qr = Enlace2::qr()->create([ 'data' => 'https://example.com', // URL o texto 'size' => 200, // Tamaño en píxeles 'name' => 'Mi QR Code', // Nombre del QR 'format' => 'png' // Formato (png, svg, jpg) ]); // Actualizar un código QR $updated = Enlace2::qr()->update($id, [ 'size' => 300, 'name' => 'QR Actualizado' ]); // Eliminar un código QR Enlace2::qr()->delete($id);
Endpoints Utilizados
GET /api/qr
- Listar códigos QRGET /api/qr/{id}
- Obtener código QR específicoPOST /api/qr/add
- Crear código QRPUT /api/qr/{id}/update
- Actualizar código QRDELETE /api/qr/{id}/delete
- Eliminar código QR
🎯 Servicio de Campañas
Organiza tus enlaces en campañas para mejor gestión y análisis.
Métodos Disponibles
// Obtener todas las campañas $campaigns = Enlace2::campaigns()->all(); // Obtener una campaña específica $campaign = Enlace2::campaigns()->get($id); // Crear una campaña $campaign = Enlace2::campaigns()->create([ 'name' => 'Mi Campaña', 'description' => 'Descripción de la campaña' ]); // Actualizar una campaña $updated = Enlace2::campaigns()->update($id, [ 'name' => 'Campaña Actualizada', 'description' => 'Nueva descripción' ]); // Eliminar una campaña Enlace2::campaigns()->delete($id); // Asignar un enlace a una campaña Enlace2::campaigns()->assignLink($campaignId, $linkId);
Endpoints Utilizados
GET /api/campaigns
- Listar campañasGET /api/campaign/{id}
- Obtener campaña específicaPOST /api/campaign/add
- Crear campañaPUT /api/campaign/{id}/update
- Actualizar campañaDELETE /api/campaign/{id}/delete
- Eliminar campañaPOST /api/campaign/{id}/assign
- Asignar enlace a campaña
📺 Servicio de Canales
Segmenta tus enlaces por canales para mejor organización.
Métodos Disponibles
// Obtener todos los canales $channels = Enlace2::channels()->all(); // Obtener un canal específico $channel = Enlace2::channels()->get($id); // Crear un canal $channel = Enlace2::channels()->create([ 'name' => 'Mi Canal', 'description' => 'Descripción del canal', 'color' => '#FF5733' // Color del canal ]); // Actualizar un canal $updated = Enlace2::channels()->update($id, [ 'name' => 'Canal Actualizado', 'color' => '#33FF57' ]); // Eliminar un canal Enlace2::channels()->delete($id); // Asignar un elemento a un canal Enlace2::channels()->assign($channelId, 'url', $itemId);
Endpoints Utilizados
GET /api/channels
- Listar canalesGET /api/channel/{id}
- Obtener canal específicoPOST /api/channel/add
- Crear canalPUT /api/channel/{id}/update
- Actualizar canalDELETE /api/channel/{id}/delete
- Eliminar canalPOST /api/channel/{id}/assign
- Asignar elemento a canal
🌐 Servicio de Dominios de Marca
Gestiona tus dominios personalizados para URLs de marca.
Métodos Disponibles
// Obtener todos los dominios $domains = Enlace2::domains()->all(); // Obtener un dominio específico $domain = Enlace2::domains()->get($id); // Crear un dominio de marca $domain = Enlace2::domains()->create([ 'domain' => 'https://mi-dominio.com', 'redirect_root' => 'https://mi-sitio.com', 'redirect_404' => 'https://mi-sitio.com/404' ]); // Actualizar un dominio $updated = Enlace2::domains()->update($id, [ 'redirect_root' => 'https://nuevo-sitio.com' ]); // Eliminar un dominio Enlace2::domains()->delete($id);
Endpoints Utilizados
GET /api/domains
- Listar dominiosGET /api/domain/{id}
- Obtener dominio específicoPOST /api/domain/add
- Crear dominioPUT /api/domain/{id}/update
- Actualizar dominioDELETE /api/domain/{id}/delete
- Eliminar dominio
📊 Servicio de Píxeles
Integra píxeles de seguimiento para analytics avanzados.
Métodos Disponibles
// Obtener todos los píxeles $pixels = Enlace2::pixels()->all(); // Obtener un píxel específico $pixel = Enlace2::pixels()->get($id); // Crear un píxel $pixel = Enlace2::pixels()->create([ 'name' => 'Mi Pixel', 'type' => 'fbpixel', // fbpixel, gtag, gtm 'tag' => 'GTM-ABCDE' // ID del píxel ]); // Actualizar un píxel $updated = Enlace2::pixels()->update($id, [ 'name' => 'Pixel Actualizado', 'tag' => 'GTM-NUEVO' ]); // Eliminar un píxel Enlace2::pixels()->delete($id);
Endpoints Utilizados
GET /api/pixels
- Listar píxelesGET /api/pixel/{id}
- Obtener píxel específicoPOST /api/pixel/add
- Crear píxelPUT /api/pixel/{id}/update
- Actualizar píxelDELETE /api/pixel/{id}/delete
- Eliminar píxel
🎨 Servicio de Superposiciones CTA
Crea superposiciones de llamada a la acción para aumentar conversiones.
Métodos Disponibles
// Obtener todas las superposiciones $overlays = Enlace2::overlays()->all(); // Obtener una superposición específica $overlay = Enlace2::overlays()->get($id); // Crear una superposición CTA $overlay = Enlace2::overlays()->create([ 'name' => 'Mi CTA', 'type' => 'message', // message, contact, form 'title' => '¡Oferta Especial!', 'message' => 'Descuento del 20% por tiempo limitado', 'button_text' => 'Aprovechar Oferta', 'button_url' => 'https://mi-sitio.com/oferta' ]); // Actualizar una superposición $updated = Enlace2::overlays()->update($id, [ 'title' => 'Nueva Oferta', 'message' => 'Descuento del 30%' ]); // Eliminar una superposición Enlace2::overlays()->delete($id);
Endpoints Utilizados
GET /api/overlay
- Listar superposicionesGET /api/overlay/{id}
- Obtener superposición específicaPOST /api/overlay/add
- Crear superposiciónPUT /api/overlay/{id}/update
- Actualizar superposiciónDELETE /api/overlay/{id}/delete
- Eliminar superposición
🔧 Configuración Avanzada
El archivo de configuración config/enlace2.php
te permite personalizar:
return [ // Tu API key de Enlace2 'api_key' => env('ENLACE2_API_KEY'), // URL base de la API (normalmente no necesitas cambiar esto) 'base_url' => env('ENLACE2_BASE_URL', 'https://enlace2.com/api/'), // Timeout para las peticiones en segundos 'timeout' => env('ENLACE2_TIMEOUT', 30), // Habilitar protección de rate limiting 'rate_limiting' => env('ENLACE2_RATE_LIMITING', true), // Configuración de caché 'cache' => [ 'enabled' => true, 'ttl' => 3600, 'store' => 'default', 'prefix' => 'enlace2:', ], // Configuración de logging 'logging' => [ 'enabled' => false, 'channel' => 'default', 'level' => 'info', 'log_requests' => true, 'log_responses' => false, ], ];
⚠️ Manejo de Errores
El package incluye manejo de errores personalizado:
use Enlace2\LaravelUrlShortener\Exceptions\ApiException; use Enlace2\LaravelUrlShortener\Exceptions\RateLimitException; try { $result = Enlace2::links()->shorten('https://example.com'); } catch (RateLimitException $e) { // Se alcanzó el límite de rate (30 requests por minuto) echo 'Rate limit alcanzado: ' . $e->getMessage(); } catch (ApiException $e) { // Error general de la API echo 'Error de API: ' . $e->getMessage(); echo 'Código de error: ' . $e->getCode(); echo 'Datos adicionales: ' . json_encode($e->getContext()); }
📊 Rate Limiting
La API de Enlace2 tiene un límite de 30 solicitudes por minuto. El SDK maneja esto automáticamente:
// Los headers de rate limiting están disponibles en las respuestas $response = Enlace2::links()->all(); // Puedes acceder a los headers de rate limiting si necesitas // X-RateLimit-Limit: 30 // X-RateLimit-Remaining: 29 // X-RateLimit-Reset: TIMESTAMP
🧪 Testing
Ejecuta los tests con:
composer test
Para generar coverage:
composer test-coverage
📈 Ejemplos de Uso Avanzado
Crear una Campaña Completa
// Crear campaña $campaign = Enlace2::campaigns()->create([ 'name' => 'Black Friday 2024', 'description' => 'Campaña de Black Friday' ]); // Crear canal $channel = Enlace2::channels()->create([ 'name' => 'Redes Sociales', 'description' => 'Enlaces para redes sociales', 'color' => '#FF6B6B' ]); // Crear enlace con opciones avanzadas $link = Enlace2::links()->shorten('https://mi-tienda.com/ofertas', [ 'custom' => 'black-friday-2024', 'title' => 'Ofertas Black Friday', 'description' => 'Las mejores ofertas del año', 'password' => 'blackfriday2024', 'expiry' => '2024-12-01 23:59:59' ]); // Asignar enlace a campaña Enlace2::campaigns()->assignLink($campaign['data']['id'], $link['data']['id']); // Asignar enlace a canal Enlace2::channels()->assign($channel['data']['id'], 'url', $link['data']['id']); // Crear código QR para el enlace $qr = Enlace2::qr()->create([ 'data' => $link['short'], 'size' => 300, 'name' => 'QR Black Friday' ]);
Integración con Analytics
// Crear píxel de Facebook $pixel = Enlace2::pixels()->create([ 'name' => 'Facebook Pixel', 'type' => 'fbpixel', 'tag' => '123456789012345' ]); // Crear superposición CTA $overlay = Enlace2::overlays()->create([ 'name' => 'Oferta Especial', 'type' => 'message', 'title' => '¡Últimas horas!', 'message' => 'Descuento del 50% por tiempo limitado', 'button_text' => 'Comprar Ahora', 'button_url' => 'https://mi-tienda.com/checkout' ]);
🔗 Enlaces Útiles
- Documentación de la API: https://enlace2.com/developers
- Sitio Web: https://enlace2.com
- Issues: Reporta problemas en GitHub
- Packagist: https://packagist.org/packages/enlace2/laravel-url-shortener
📝 Changelog
Ver CHANGELOG.md para un historial detallado de cambios.
🤝 Contribuir
Las contribuciones son bienvenidas. Por favor, asegúrate de que tus cambios incluyan tests apropiados.
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature
) - Commit tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abre un Pull Request
📄 Licencia
Este package es software de código abierto licenciado bajo la Licencia MIT.
🆘 Soporte
- Email: Contacta el soporte de Enlace2
- GitHub Issues: Reporta problemas técnicos
- Documentación: Consulta la documentación oficial de la API
Desarrollado con ❤️ por Renato Ascencio