6.7 KiB
Executable File
6.7 KiB
Executable File
INDEX_public.md — public.php
Archivo:
public.php| 2978 líneas | Portal web administrativo + endpoint público HTTP
Propósito
Archivo dual:
- Endpoint REST/webhook — recibe webhooks de Stripe, solicitudes OXXO, y llamadas AJAX del portal
- SPA PHP — interfaz web administrativa con 4 módulos (Instaladores, Notificaciones, Stripe, OXXO)
Variables globales inicializadas (L.1–65)
| Variable | Descripción |
|---|---|
$config |
Config del plugin cargada de data/config.json |
$ucrmApi |
UcrmApi (SDK) con base_uri UCRM y apitoken |
$paymentIntentService |
PaymentIntentService con stripeApiKey |
$admins |
Array de admins UCRM [id, nombre] |
$defaultStripeAdminId |
ID del admin "stripe" o primero de la lista |
$nmsBaseUrl |
https://{ipserver}/nms/api/v2.1 |
$installersData |
JSON de instaladores desde config |
Mapa de Endpoints / Actions
POST con JSON body (L.22–35) — Webhook delegado a Plugin::run()
| Condición | Acción |
|---|---|
| `isset($jsonData['uuid']) |
POST ?action=nms_login (L.80–117) — Login NMS
- Body:
{username, password} - Respuesta 200:
{success, token, user} - Respuesta 201:
{requires2FA, twoFactorToken}→ sigue connms_login_totp - Guarda token en:
sessionStorage('nms_auth_token')(frontend)
POST ?action=nms_login_totp (L.120–146) — Login TOTP 2FA
- Body:
{twoFactorToken, ..., totpCode} - Respuesta 200:
{success, token, user}
GET ?action=nms_verify_session (L.148–173) — Verificar sesión NMS
- Header:
x-auth-token - Llama:
GET {nmsBaseUrl}/user
POST $_POST['action'] (L.176–291)
| action | Línea | Params | Descripción |
|---|---|---|---|
save_installers |
177 | installers_data (JSON) |
Guarda JSON en config.json |
resend_payment |
191 | paymentId |
Obtiene pago+cliente UCRM, hace loopback POST a sí mismo simulando webhook |
resend_job_notification |
238 | jobId |
Simula webhook job.edit con status 0→1 y prefijo [NOTIFICACION-PENDIENTE] |
create_intent |
443 | clientId, amount, stripeCustomerId, adminId |
PaymentIntentService->createPaymentIntent() |
create_oxxo_intent |
463 | clientId, amount |
PluginOxxoNotifierFacade->createOxxoPaymentIntent() via DI |
GET ?action=... (L.293–438)
| action | Línea | Params GET | Descripción |
|---|---|---|---|
search_clients |
296 | q |
UCRM GET clients?query=q&limit=6 |
get_payments |
307 | clientId |
UCRM GET payments?clientId=...&limit=20 + names de métodos |
search_stripe |
323 | q |
PaymentIntentService->searchClients(q) |
get_stripe_details |
329 | id (clientId UCRM) |
PaymentIntentService->getClientDetails(id) |
get_stripe_history |
339 | stripeCustomerId |
Balance cash + últimos 10 PIs de transferencia |
get_oxxo_history |
355 | stripeCustomerId |
Últimos 5 PIs OXXO de Stripe |
get_installer_jobs |
365 | installerId |
UCRM GET scheduling/jobs?assignedUserId=...&statuses=[0,1]&limit=50 |
image / get_image |
413 | file o name |
Sirve imágenes de /img/, /img/webp/, /vouchers_oxxo/ |
HTML/UI — Estructura (L.481–2064)
Variables PHP→JS inyectadas (L.2066–2075)
NEEDS_LOGIN = true/false // Si sesión UCRM activa
SYSTEM_USER_ID = null|int // ID usuario actual
store.installers = [...] // Array de instaladores desde config
store.crmUrl = 'https://...' // URL base API UCRM
store.publicUrl = 'https://...'// URL pública CRM
store.defaultStripeAdminId = '' // ID admin Stripe por defecto
Módulos de la UI (tabs)
| Tab ID | Sección HTML | Descripción |
|---|---|---|
instaladores |
#section-instaladores |
Tabla instaladores + jobs activos del instalador |
notificaciones |
#section-notificaciones |
Búsqueda cliente + tabla pagos + botón reenviar |
pagos-spei |
#section-pagos-spei (en views/stripe.php) |
Generador Stripe + historial |
pagos-oxxo |
#section-pagos-oxxo (en views/oxxo.php) |
Generador OXXO + historial |
Funciones JS principales (L.2065+)
| Función | Descripción |
|---|---|
toggleTheme() |
Cambia light/dark en data-theme + localStorage |
showDashboard() |
Muestra menú principal, oculta módulos |
showModule(id) |
Activa módulo por ID (mapea 'stripe'→'pagos-spei', etc.) |
switchTab(tabName) |
Cambia tab activa y sección visible |
showToast(msg, err) |
Toast temporal 3s |
setupSearch(inputId, resultId, action, onSelect) |
Search debounced 300ms → fetch ?action=... |
renderRichSearchResults(container, data, query, cb) |
Renderiza resultados de búsqueda con highlight |
highlightMatch(text, query) |
Resalta coincidencias en texto |
loadPayments(id) |
Fetch ?action=get_payments&clientId=id → tabla |
refreshClientPayments() |
Recarga pagos del cliente actual |
resendPayment(id) |
POST action=resend_payment&paymentId=id |
loadOxxoHistory(stripeCustomerId) |
Fetch ?action=get_oxxo_history → tabla |
handleLogin() |
POST ?action=nms_login → guarda token en sessionStorage |
handleTotpLogin() |
POST ?action=nms_login_totp |
handleLogout() |
Limpia sessionStorage + reload |
Funciones JS Instaladores
| Función | Descripción |
|---|---|
openInstallerModal() |
Abre modal de nuevo instalador |
fillInstallerData(select) |
Rellena campos desde select de admin |
loadInstallerJobs(installerId) |
Fetch ?action=get_installer_jobs&installerId=... |
resendJobNotification(jobId) |
POST action=resend_job_notification |
renderInstallersTable() |
Renderiza tabla desde store.installers |
Includes externos (L.1992–1993)
include __DIR__ . '/views/stripe.php'; // Sección y JS del módulo Stripe
include __DIR__ . '/views/oxxo.php'; // Sección y JS del módulo OXXO
Archivos que sirve el endpoint image
/img/*.{png,webp,jpg}/img/webp/*.{webp}/vouchers_oxxo/*.{png,webp,jpg}
Login overlay (L.1711–1750)
- Se muestra si
NEEDS_LOGIN = true(usuario sin sesión UCRM activa) - Pide credenciales NMS (UISP), no UCRM
- Soporta 2FA TOTP
- Token guardado en
sessionStorage('nms_auth_token')
Notas de implementación
resend_paymenthace un loopback cURL a sí mismo simulando webhook UCRMcreate_intentusaPaymentIntentServiceque llama a Stripe SDK directo- El CSS (~1200 líneas) está inline en el archivo, soporta dark/light mode vía
data-theme - Las vistas
stripe.phpyoxxo.phptienen su propio JS, leer esos archivos para modificar esos módulos