Paymenter: la alternativa open source a WHMCS para facturar hosting y suscripciones
Facturar suscripciones parece trivial hasta que hay que generar la factura siete días antes del vencimiento, cobrar a la tarjeta guardada, suspender el servicio si no se paga y reactivarlo cuando entra el dinero. Eso es exactamente lo que automatiza Paymenter: una plataforma de facturación y gestión de clientes, open source bajo licencia MIT, pensada para empresas de hosting y fácilmente adaptable a otros modelos de ingresos recurrentes.
En este análisis revisamos qué es, cómo funciona por dentro (leyendo el código del repositorio oficial), cómo se instala y dónde encaja, y dónde no, para pymes, agencias de software pequeñas y otros negocios.

¿Qué es Paymenter?
Paymenter se define como "Open-Source Billing, Built for Hosting": una alternativa autoalojada a WHMCS o Blesta. Cubre el ciclo completo de un negocio de servicios recurrentes: catálogo de productos, carrito y checkout, facturas, cobros por pasarela, aprovisionamiento automático del servicio contratado, tickets de soporte y área de cliente.
- Licencia: MIT. Puedes usarlo, modificarlo y revenderlo como parte de tu solución sin pagar licencias por cliente ni por instalación.
- Stack: PHP 8.3+, Laravel 13, Filament 5 (panel de administración), Livewire 4 (área de cliente), MariaDB y Redis para caché y colas.
- Comunidad: unas 2.700 estrellas y más de 500 forks en GitHub en el momento de escribir esto, con Discord activo y marketplace de extensiones y temas.
- Idiomas: el repositorio trae traducciones para 24 idiomas, incluido el español, y soporta multimoneda.
- Demo pública: demo.paymenter.org para probarlo antes de instalar nada.
Cómo funciona por dentro
El modelo de datos
El núcleo está en app/Models. La cadena principal es Product → Plan → Price: un producto (por ejemplo, "VPS 2 GB") tiene uno o varios planes (gratis, pago único o recurrente cada N días, semanas, meses o años) y cada plan tiene precios por moneda, con cuota de configuración opcional. Cuando el cliente compra, se crea un Order con uno o varios Service; cada servicio genera Invoice con sus InvoiceItem y los pagos se registran como InvoiceTransaction.
Alrededor de eso hay piezas que cualquier sistema de cobro serio necesita: Coupon (descuentos recurrentes o de un solo ciclo), TaxRate, Credit (saldo a favor), BillingAgreement (método de pago guardado para cobros automáticos), ServiceUpgrade para subir o bajar de plan con prorrateo, y ServiceCancellation.

El ciclo de facturación automático
La lógica de negocio recurrente vive en un solo comando, app:cron-job (app/Console/Commands/CronJob.php), que el scheduler de Laravel ejecuta una vez al día a la hora configurada. En cada ejecución, dentro de una transacción de base de datos:
- Genera la factura de cada servicio activo que vence en los próximos N días (7 por defecto) y aplica cupones recurrentes.
- Si el cliente tiene un billing agreement (tarjeta o PayPal guardado), intenta el cobro automático.
- Cancela los pedidos cuya primera factura no se pagó a tiempo.
- Suspende los servicios vencidos tras X días y los termina tras Y días, cancelando facturas pendientes.
- Cierra tickets sin respuesta y purga logs antiguos.
Las acciones costosas (crear, suspender o terminar un servidor en el panel de hosting) se despachan como jobs a la cola, por eso la instalación necesita un queue worker de Laravel corriendo de forma permanente.
Arquitectura de extensiones
Todo lo que conecta Paymenter con el mundo exterior es una extensión dentro de extensions/, en tres tipos:
- Gateways (pasarelas de pago): Stripe, PayPal, PayPal IPN y Mollie vienen incluidas. Una pasarela implementa
pay()y, opcionalmente, billing agreements (createBillingAgreement,charge) y reembolsos (refund). - Servers (aprovisionamiento): Pterodactyl, cPanel, Plesk, DirectAdmin, Enhance, Convoy, VirtFusion y Virtualizor. Implementan
createServer,suspendServer,unsuspendServer,terminateServeryupgradeServer, que Paymenter llama según el estado del servicio. - Others: módulos funcionales como Affiliates (programa de afiliados con comisiones), Announcements y notificaciones a Discord.
Escribir una extensión propia es una clase PHP con un atributo #[ExtensionMeta]. Este es el esqueleto mínimo de una pasarela, basado en la implementación real de Mollie del repositorio:
# Genera el esqueleto de una extensión (tipos: gateway, server, other)
php artisan app:extension:create MiPasarela gateway<?php
namespace Paymenter\Extensions\Gateways\MiPasarela;
use App\Attributes\ExtensionMeta;
use App\Classes\Extension\Gateway;
use App\Helpers\ExtensionHelper;
use App\Models\Invoice;
use Illuminate\Http\Request;
#[ExtensionMeta(name: 'Mi Pasarela', description: 'Pasarela local', version: '1.0.0', author: 'codigoagente')]
class MiPasarela extends Gateway
{
// Campos que el admin rellena en Admin → Gateways (se guardan cifrados)
public function getConfig($values = [])
{
return [
['name' => 'api_key', 'label' => 'API Key', 'type' => 'text', 'encrypted' => true, 'required' => true],
];
}
// Devuelve la URL de checkout de la pasarela (o una vista)
public function pay(Invoice $invoice, $total)
{
// ... crear el cobro en la API del proveedor con $invoice->id como referencia
return $checkoutUrl;
}
// Webhook del proveedor: marca la factura como pagada
public function webhook(Request $request)
{
ExtensionHelper::addPayment($request->input('invoice_id'), 'MiPasarela', $request->input('amount'), transactionId: $request->input('id'));
}
}Además del panel, Paymenter expone una API REST documentada con OpenAPI y soporte de clientes OAuth, lo que permite integrarlo con un ERP, un CRM o tu propio frontend.
Soporte y datos del cliente
El sistema de tickets incluye departamentos, prioridades e importación de correos por IMAP (app:fetch-emails, cada cinco minutos). Las Custom Properties permiten añadir campos propios al cliente o al servicio (RUC, razón social, dirección fiscal) y decidir si son obligatorios o si aparecen en la factura.


Instalación
Opción rápida: Docker
La vía más corta para evaluarlo en un VPS o en local. El compose oficial levanta MariaDB, Redis y la imagen ghcr.io/paymenter/paymenter, que ya incluye nginx, PHP-FPM, el cron del scheduler y el worker de colas bajo supervisord:
# 1. Descarga el docker-compose de ejemplo del repositorio oficial
curl -Lo docker-compose.yml https://raw.githubusercontent.com/Paymenter/Paymenter/master/docker-compose.example.yml
# 2. Edita MYSQL_PASSWORD y MYSQL_ROOT_PASSWORD (y el puerto si 80 está ocupado)
nano docker-compose.yml
# 3. Levanta MariaDB, Redis y Paymenter
docker compose up -d --force-recreate
# 4. Configura la URL pública, siembra propiedades y crea el administrador
docker compose exec paymenter php artisan app:init
docker compose exec paymenter php artisan db:seed --class=CustomPropertySeeder
docker compose exec paymenter php artisan app:user:createPaymenter queda escuchando en el puerto 80. Si lo pones detrás de un proxy inverso, agrega su IP o subred en Admin → Settings → Security como proxy de confianza o fallará la subida de archivos.
Opción producción: servidor Linux
La guía oficial soporta Ubuntu 22.04/24.04, Debian 11–13 y CentOS 8/9 (Windows no está soportado). Dependencias:
# Ubuntu 24.04 / 22.04 (según la guía oficial)
apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
apt update
apt -y install php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip,intl,redis} \
mariadb-server nginx tar unzip git redis-serverDescarga de la última release y configuración base:
mkdir -p /var/www/paymenter && cd /var/www/paymenter
curl -Lo paymenter.tar.gz https://github.com/paymenter/paymenter/releases/latest/download/paymenter.tar.gz
tar -xzvf paymenter.tar.gz
chmod -R 755 storage/* bootstrap/cache/
cp .env.example .env
php artisan key:generate --force
php artisan storage:linkBase de datos (dentro de mysql -u root -p):
CREATE USER 'paymenter'@'127.0.0.1' IDENTIFIED BY 'cambia-esta-clave';
CREATE DATABASE paymenter;
GRANT ALL PRIVILEGES ON paymenter.* TO 'paymenter'@'127.0.0.1' WITH GRANT OPTION;Migraciones, usuario administrador y cron:
php artisan migrate --force --seed
php artisan db:seed --class=CustomPropertySeeder
php artisan app:init
php artisan app:user:create
# Scheduler de Laravel (dispara app:cron-job a diario y app:fetch-emails cada 5 min)
# sudo crontab -u www-data -e
* * * * * php /var/www/paymenter/artisan schedule:run >> /dev/null 2>&1Por último, el worker de colas como servicio de systemd y la configuración de nginx apuntando a /var/www/paymenter/public (la guía oficial incluye el bloque completo con y sin SSL):
[Unit]
Description=Paymenter Queue Worker
[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/paymenter/artisan queue:work
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now paymenter.service
sudo systemctl enable --now redis-serverMigrar desde WHMCS
Si vienes de WHMCS, el importador incluido trae monedas, clientes, administradores, categorías, productos, pedidos, servicios, facturas, pagos y tickets:
# Importa clientes, productos, servicios, facturas y tickets desde una BD de WHMCS
# (borra los datos existentes de Paymenter: haz backup antes)
php artisan app:import-from-whmcs whmcs_temp root 127.0.0.1 3306Cómo ayuda a pymes, agencias y otros negocios
Empresas de hosting y game servers
Es su caso de uso nativo. Un cliente compra un plan, paga con Stripe o PayPal, y Paymenter crea la cuenta en cPanel, Plesk o DirectAdmin, el VPS en VirtFusion, Convoy o Virtualizor, o el servidor de juego en Pterodactyl, sin intervención humana. Si no paga, se suspende y luego se termina de forma automática.
Agencias de software pequeñas
Una agencia de 2 a 10 personas suele tener ingresos recurrentes dispersos: hosting de sitios de clientes, mantenimiento mensual, bolsas de horas de soporte, licencias de plugins o SaaS propios. Paymenter centraliza todo eso:
- Planes de mantenimiento como productos recurrentes (Básico, Pro, Premium) con upgrades y downgrades prorrateados.
- Hosting revendido aprovisionado automáticamente si usas cPanel, Plesk, DirectAdmin o Enhance.
- Soporte con tickets atado al servicio contratado, en lugar de correos sueltos.
- SaaS propio: una extensión de tipo Server puede llamar a la API de tu producto para crear, suspender o eliminar el tenant del cliente según su estado de pago.
- Marca blanca: temas personalizables (
app:theme:create) para que el portal de clientes lleve tu identidad.
Pymes de otros sectores
Un producto en Paymenter no necesita servidor asociado: si no eliges extensión de aprovisionamiento, el servicio queda activo para que lo gestiones a mano. Eso lo hace viable para cualquier negocio que venda servicios recurrentes: membresías, cuotas de gimnasio o academia, iguala contable o legal, licencias de software, mantenimiento de equipos o planes de soporte técnico.
Hay límites que conviene conocer antes de adoptarlo:
- No es un e-commerce de productos físicos: tiene stock y límites por cliente, pero no envíos, variantes logísticas ni inventario multi-bodega.
- Pasarelas incluidas: Stripe, PayPal y Mollie. Para pasarelas locales de Latinoamérica (Payphone, Kushki, Mercado Pago, etc.) hay que buscarlas en el marketplace o escribir la extensión, como en el ejemplo anterior.
- Facturación electrónica fiscal: las facturas de Paymenter son documentos de cobro, no comprobantes electrónicos válidos ante el SRI, el SAT o la DIAN. Si tu país lo exige, necesitas integrar un emisor certificado, por ejemplo con una extensión que escuche el pago y emita el comprobante.
- Operación: autoalojarlo implica mantener PHP, MariaDB, backups, TLS y actualizaciones. Si eso no encaja con tu equipo, el proyecto ofrece hosting gestionado desde 5 USD/mes según su sitio.
Seguridad y cumplimiento
Paymenter no almacena números de tarjeta: el cobro y la tokenización ocurren en Stripe, PayPal o Mollie, lo que reduce el alcance PCI de tu instalación. Las credenciales de las extensiones se guardan cifradas con la APP_KEY de Laravel, y el panel incluye roles, auditoría y claves de API. Aun así, al ser autoalojado, la superficie de ataque depende de ti: mantén el sistema actualizado (php artisan app:upgrade), fuerza HTTPS y restringe el acceso al panel de administración.
Veredicto
Paymenter es hoy una de las alternativas open source más maduras a WHMCS: stack moderno (Laravel + Filament), licencia MIT sin letra pequeña, extensiones claras y un ciclo de facturación automático bien resuelto en código. Para empresas de hosting es una opción directa; para agencias y pymes con ingresos recurrentes es una base sólida, siempre que asumas la integración de pasarelas locales y de facturación electrónica de tu país.
Recursos
- Repositorio en GitHub (MIT)
- Documentación oficial
- Guía de instalación y guía Docker
- Demo en vivo
- Marketplace de extensiones
Las capturas de pantalla pertenecen al proyecto Paymenter y provienen de su repositorio de documentación, publicado bajo AGPL-3.0.
// código fuente
// implementación