From e0b0e6346b5ca7f6102e9cf614c7529b3326abd3 Mon Sep 17 00:00:00 2001 From: User Date: Mon, 24 Nov 2025 11:46:18 -0600 Subject: [PATCH 1/3] Cambios para la edicion de correos en pasarela --- .env | 14 +- assets/js/hmngypasarela.js | 6 +- editarUsuario.php | 895 ++++++++++++++++++++++++++++++++++++ php/logs/form_processor.log | 42 ++ php/process_user_edit.php | 383 +++++++++++++++ verUsuarios.php | 10 +- 6 files changed, 1339 insertions(+), 11 deletions(-) create mode 100644 editarUsuario.php create mode 100644 php/process_user_edit.php diff --git a/.env b/.env index 3476e44..4a1aa93 100644 --- a/.env +++ b/.env @@ -17,7 +17,7 @@ DEV_API_KEY = jNJdG9zBY92NSAALgnEdsoEIRycJiAScB6pBgIADsyg= #VARIABLES DB DB_HOST = 192.168.100.127 DB_USER = gateway -DB_PASS = 7Zrs5447JkLReHH +DB_PASS = DB_NAME = gateway #VARIABLES DB @@ -27,14 +27,14 @@ DEV_DB_PASS = DEV_DB_NAME = gateway #SAP PROD -SAP_URL=122.8.178.132 -SAP_USR=WS-USER -SAP_PASS=bmas.2024 +SAP_URL= +SAP_USR= +SAP_PASS= #SAP QAS -DEV_SAP_URL=110.238.82.143 -DEV_SAP_USR=WS-USER -DEV_SAP_PASS=bmas.2024 +DEV_SAP_URL= +DEV_SAP_USR= +DEV_SAP_PASS= #RUTAS CFDI_XML_FILE_URL = ../../facturacion/xml diff --git a/assets/js/hmngypasarela.js b/assets/js/hmngypasarela.js index 606e6e3..adfdaef 100644 --- a/assets/js/hmngypasarela.js +++ b/assets/js/hmngypasarela.js @@ -1,4 +1,4 @@ -var apiKey = "hmngy-TGFNKK1ZDpj7fUe41OOlh9k-CoYss53A"; +var apiKey = "hmngy-60lXd3pZRePVdSpItDhnC3408GvLDHU4"; function stripeTokenHandler(token) { let form = document.getElementById("payment-form"); @@ -11,7 +11,7 @@ function stripeTokenHandler(token) { document.addEventListener("DOMContentLoaded", () => { - fetch("https://gateway.calidadbmasconsulting.com/api/obtLavePublicaStripe", { + fetch("http://127.0.0.1:8000/api/obtLavePublicaStripe", { method: "POST", headers: { "Content-Type": "application/json", @@ -104,7 +104,7 @@ document.addEventListener("DOMContentLoaded", () => { `; - fetch("https://gateway.calidadbmasconsulting.com/api/createPayment", { + fetch("http://127.0.0.1:8000/api/createPayment", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", diff --git a/editarUsuario.php b/editarUsuario.php new file mode 100644 index 0000000..4c2ab0b --- /dev/null +++ b/editarUsuario.php @@ -0,0 +1,895 @@ + $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 0, + CURLOPT_CONNECTTIMEOUT => 0, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "GET", + )); + $response = curl_exec($curl); + curl_close($curl); + + $users = json_decode($response, true); + if ($users) { + foreach ($users as $user) { + if ($user['id'] == $userId) { + $userData = $user; + break; + } + } + } +} + +if (!$userData) { + echo ""; + exit; +} +?> + +
+ +
+
+

Editar Usuario

+

Modifique los datos del usuario

+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ + + + + +
+ +
+ Logo actual: " target="_blank">Ver logo +
+ +
+ +
+ + +
+ + +
+
+ + + +
+
+
+ +
+
+ + + diff --git a/php/logs/form_processor.log b/php/logs/form_processor.log index 98ee580..3557850 100644 --- a/php/logs/form_processor.log +++ b/php/logs/form_processor.log @@ -84,3 +84,45 @@ {"timestamp":"2025-10-28 15:10:37","level":"success","message":"Usuario enviado a API","context":{"usuario":"qwsqws","empresa":"awqsws","ip":"127.0.0.1"}} {"timestamp":"2025-10-28 15:11:52","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/regUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand"]}} {"timestamp":"2025-10-28 15:11:54","level":"success","message":"Usuario enviado a API","context":{"usuario":"wdqdqw","empresa":"Demo","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 15:35:21","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand"]}} +{"timestamp":"2025-11-24 15:38:27","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand"]}} +{"timestamp":"2025-11-24 15:39:53","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 15:40:37","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 15:43:57","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 15:57:58","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 15:58:00","level":"error","message":"Error general en process_user.php","context":{"error":"Error de conexi\u00f3n con la API: Failed to connect to 127.0.0.1 port 8000: Connection refused","trace":"#0 C:\\laragon\\www\\hmnypasarela\\php\\process_user_edit.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 15:58:17","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 15:58:34","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:01:53","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:02:22","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:02:48","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:02:51","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:03:17","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:03:17","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:03:34","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:09:10","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:10:33","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:11:40","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:12:40","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:28:21","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:29:29","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clavePublica","clavePrivada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:32:16","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:32:19","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:35:15","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:35:17","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:38:18","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:38:18","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:39:29","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:39:31","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:39:57","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:39:59","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:45:26","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:45:28","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:46:05","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:46:08","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:49:23","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:49:25","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:49:43","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:49:45","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 16:50:26","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 16:50:28","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} diff --git a/php/process_user_edit.php b/php/process_user_edit.php new file mode 100644 index 0000000..9b0e204 --- /dev/null +++ b/php/process_user_edit.php @@ -0,0 +1,383 @@ + false, + 'message' => 'Método no permitido. Solo se acepta POST.' + ]); + exit; +} + +// Configuración de la API Laravel +$API_CONFIG = [ + 'base_url' => $ruta.'/api', // Cambiar por tu URL de Laravel + 'endpoint' => '/editUsuario', // Tu endpoint de Laravel + 'timeout' => 30, // Timeout en segundos + 'auth_token' => '', // Token de autenticación si es necesario +]; + +try { + // Validar y procesar datos del formulario + $formData = validateAndProcessForm(); + + // Enviar datos a la API Laravel usando cURL + $apiResponse = sendToLaravelAPI($formData, $API_CONFIG); + + // Procesar respuesta de la API + $response = processAPIResponse($apiResponse); + + // Log de éxito + logActivity('success', 'Usuario enviado a API', [ + 'usuario' => $formData['usuario'] ?? 'N/A', + 'empresa' => $formData['empresa'] ?? 'N/A', + 'ip' => $_SERVER['REMOTE_ADDR'] ?? 'N/A' + ]); + + // Retornar respuesta + echo json_encode($response); + +} catch (ValidationException $e) { + // Errores de validación + http_response_code(422); + echo json_encode([ + 'success' => false, + 'message' => 'Error de validación', + 'errors' => $e->getErrors() + ]); + +} catch (APIException $e) { + // Errores de la API + http_response_code($e->getHttpCode()); + echo json_encode([ + 'success' => false, + 'message' => $e->getMessage(), + 'api_error' => $e->getApiError() + ]); + +} catch (Exception $e) { + // Errores generales + logActivity('error', 'Error general en process_user.php', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + 'ip' => $_SERVER['REMOTE_ADDR'] ?? 'N/A' + ]); + + http_response_code(500); + echo json_encode([ + 'success' => false, + 'message' => 'Error interno del servidor. Por favor intente nuevamente.'.$e->getMessage() + ]); +} + +// ============================================================================ +// FUNCIONES PRINCIPALES +// ============================================================================ + +/** + * Validar y procesar datos del formulario + */ +function validateAndProcessForm() { + $errors = []; + + // Campos requeridos + $requiredFields = [ + 'empresa' => 'Nombre de la Empresa', + 'usuario' => 'Nombre de Usuario', + 'email' => 'Correo Electrónico', + 'clavePublica' => 'Clave Pública', + 'clavePrivada' => 'Clave Privada', + 'colorValue' => 'Color de Branding' + ]; + + // Validar campos requeridos + foreach ($requiredFields as $field => $label) { + if (empty($_POST[$field]) || trim($_POST[$field]) === '') { + $errors[$field] = ["$label es obligatorio"]; + } + } + + // Validar formato de email + if (!empty($_POST['email']) && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { + $errors['email'] = ['El formato del correo electrónico no es válido']; + } + + // Validar usuario (solo alfanuméricos, guiones y guiones bajos) + if (!empty($_POST['usuario']) && !preg_match('/^[a-zA-Z0-9_-]+$/', $_POST['usuario'])) { + $errors['usuario'] = ['El usuario solo puede contener letras, números, guiones y guiones bajos']; + } + + + + + // Si hay errores, lanzar excepción + if (!empty($errors)) { + throw new ValidationException($errors); + } + + // Procesar y limpiar datos + $formData = [ + 'id' => $_POST['id'] ?? null, // Asegurarse de que el ID se incluya + 'empresa' => trim($_POST['empresa']), + 'usuario' => trim($_POST['usuario']), + 'email' => strtolower(trim($_POST['email'])), + 'platf_pago' => !empty($_POST['platf_pago']) ? $_POST['platf_pago'] : 'stripe', + 'clave_publica' => formatKey($_POST['clavePublica']), + 'clave_privada' => formatKey($_POST['clavePrivada']), + 'colorBrand' => formatKey($_POST['colorValue']), + ]; + + // Procesar logo si se envió + if (isset($_FILES['logo']) && isset($_FILES['logo']['error']) && $_FILES['logo']['error'] !== UPLOAD_ERR_NO_FILE) { + // processLogo validará el archivo y devolverá la info necesaria + $formData['logo'] = processLogo($_FILES['logo']); + } else if (isset($_POST['current_logo']) && !empty($_POST['current_logo'])) { + // Si no se subió un nuevo logo, pero hay un logo actual, enviarlo + $formData['current_logo'] = $_POST['current_logo']; + } + + return $formData; +} + +/** + * Enviar datos a la API Laravel usando cURL + */ +function sendToLaravelAPI($formData, $config) { + $url = $config['base_url'] . $config['endpoint']; + + // Inicializar cURL + $ch = curl_init(); + // Preparar campos para envío multipart/form-data + $postFields = []; + foreach ($formData as $key => $value) { + if ($key === 'logo' && is_array($value) && isset($value['tmp_name'])) { + // Verificar que el archivo existe y es legible + if (!is_readable($value['tmp_name'])) { + throw new Exception('No se puede leer el archivo de logo'); + } + // Crear CURLFile para enviar el archivo + $postFields['logo'] = new CURLFile( + $value['tmp_name'], + $value['type'], + $value['name'] + ); + // Agregar información adicional del archivo + $postFields['logo_name'] = $value['name']; + $postFields['logo_type'] = $value['type']; + } else { + $postFields[$key] = $value; + } + } + + // Cabeceras - NO establecer 'Content-Type: multipart/form-data' manualmente + // cURL añadirá la cabecera Content-Type con el boundary correcto cuando se use CURLFile + $headers = [ + 'Accept: application/json', + 'X-Requested-With: XMLHttpRequest' + ]; + if (!empty($config['auth_token'])) { + $headers[] = 'Authorization: Bearer ' . $config['auth_token']; + } + + // Configurar cURL + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $postFields, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => $config['timeout'], + CURLOPT_CONNECTTIMEOUT => 10, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_MAXREDIRS => 3, + CURLOPT_SSL_VERIFYPEER => false, // Solo para desarrollo + CURLOPT_USERAGENT => 'PHP-FormProcessor/1.0', + CURLOPT_HTTPHEADER => $headers + ]); + // Log de depuración: claves y estado del archivo (no logeamos contenido binario) + logActivity('debug', 'Preparando campos para enviar a API', [ + 'url' => $url, + 'post_keys' => array_keys($postFields) + ]); + if (isset($postFields['logo']) && isset($formData['logo'])) { + $tmp = $formData['logo']['tmp_name'] ?? null; + logActivity('debug', 'Estado logo antes de cURL', [ + 'tmp_name' => $tmp, + 'exists' => $tmp ? file_exists($tmp) : false, + 'readable' => $tmp ? is_readable($tmp) : false, + 'size' => $formData['logo']['size'] ?? null, + 'error' => $formData['logo']['error'] ?? null + ]); + } + + // Ejecutar petición + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $error = curl_error($ch); + + curl_close($ch); + + // Verificar errores de cURL + if ($response === false || !empty($error)) { + throw new Exception("Error de conexión con la API: $error"); + } + + + + // Decodificar respuesta JSON + $decodedResponse = json_decode($response, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + throw new Exception("Respuesta inválida de la API: " . $response); + } + + return [ + 'http_code' => $httpCode, + 'data' => $decodedResponse, + 'raw_response' => $response + ]; +} + +/** + * Procesar respuesta de la API + */ +function processAPIResponse($apiResponse) { + $httpCode = $apiResponse['http_code']; + $data = $apiResponse['data']; + + // Verificar código de estado HTTP + if ($httpCode >= 200 && $httpCode < 300) { + // Éxito + return [ + 'success' => true, + 'message' => $data['message'] ?? 'Usuario registrado exitosamente', + 'data' => $data['data'] ?? null + ]; + } else { + // Error de la API + throw new APIException( + $data['message'] ?? 'Error en la API', + $httpCode, + $data + ); + } +} + +/** + * Formatear claves (limpiar espacios y normalizar) + */ +function formatKey($key) { + // Limpiar espacios extra + $cleanKey = trim($key); + + // Normalizar saltos de línea + $cleanKey = str_replace(["\r\n", "\r"], "\n", $cleanKey); + + return $cleanKey; +} + +/** + * Procesar archivo de logo + */ +function processLogo($logoFile) { + // Validar archivo + $allowedTypes = ['image/jpeg', 'image/png', 'image/jpg', 'image/svg+xml']; + $maxSize = 2 * 1024 * 1024; // 2MB + + if (!in_array($logoFile['type'], $allowedTypes)) { + throw new ValidationException(['logo' => ['El logo debe ser un archivo JPG, PNG o SVG']]); + } + + if ($logoFile['size'] > $maxSize) { + throw new ValidationException(['logo' => ['El logo no puede ser mayor a 2MB']]); + } + + // Verificar que el archivo se subió correctamente + if (!is_uploaded_file($logoFile['tmp_name'])) { + throw new ValidationException(['logo' => ['Error al subir el archivo']]); + } + + // Verificar que podemos leer el archivo + if (!is_readable($logoFile['tmp_name'])) { + throw new ValidationException(['logo' => ['No se puede leer el archivo subido']]); + } + + return [ + 'name' => $logoFile['name'], + 'type' => $logoFile['type'], + 'tmp_name' => $logoFile['tmp_name'], + 'size' => $logoFile['size'], + 'error' => $logoFile['error'] + ]; +} + +/** + * Registrar actividad en log + */ +function logActivity($level, $message, $context = []) { + $logEntry = [ + 'timestamp' => date('Y-m-d H:i:s'), + 'level' => $level, + 'message' => $message, + 'context' => $context + ]; + + $logFile = 'logs/form_processor.log'; + + // Crear directorio de logs si no existe + if (!file_exists(dirname($logFile))) { + mkdir(dirname($logFile), 0755, true); + } + + // Escribir al log + file_put_contents($logFile, json_encode($logEntry) . "\n", FILE_APPEND | LOCK_EX); +} + +// ============================================================================ +// CLASES DE EXCEPCIÓN PERSONALIZADAS +// ============================================================================ + +class ValidationException extends Exception { + private $errors; + + public function __construct($errors) { + $this->errors = $errors; + parent::__construct('Errores de validación'); + } + + public function getErrors() { + return $this->errors; + } +} + +class APIException extends Exception { + private $httpCode; + private $apiError; + + public function __construct($message, $httpCode = 500, $apiError = null) { + $this->httpCode = $httpCode; + $this->apiError = $apiError; + parent::__construct($message); + } + + public function getHttpCode() { + return $this->httpCode; + } + + public function getApiError() { + return $this->apiError; + } +} + +?> diff --git a/verUsuarios.php b/verUsuarios.php index a4b5efd..c355dda 100644 --- a/verUsuarios.php +++ b/verUsuarios.php @@ -54,6 +54,7 @@ $url = $ruta.'/api/verUsuarios'; Empresa Plat. Pago Llave + Acciones @@ -65,6 +66,7 @@ $url = $ruta.'/api/verUsuarios'; +
@@ -36,10 +37,11 @@
- + + @@ -110,18 +112,32 @@
  • Una vez agregado el codigo, integra el siguiente JS y agregalo despues del script que se mostro anteriormente.
  • - +
  • Insertar el archivo de esta manera
  • 
    -<script src="ruta/a/tu/archivo/hmngypasarela.js"></script>
    +<script src="ruta/a/tu/archivo/hmngy-Pasarela.js"></script>
                 
    -
  • Cambiar la variable apiKey por la que se te genero en el registro
  • -
  • en el JS, esta este codig, solo cambiar por la ruta del archivo HTML que trae el modal: fetch('ruta/a/al/archivo/hmngypasarelamodal.html') cambiar
  • + +
+
    +
  • Generar un arhivo llamado .app_config en la raiz de tu proyecto y coloca la siguiente información
  • +
    apiKey_pasarela=tu apiKey de Humanergy Pasarela
    +imagen_pasarela=tu imagen del header de la pasarela, en Base64
    +                                                    
    +                                            
    +
  • puedes descargar el ejemplo de este archivo --> + +
  • +
  • Cambiar la variable apiKey por la que se te genero en el registro
  • +
  • Agregar la variable imagen_pasarela con el base64 de la imagen que mas gustes
  • +
+ + @@ -155,73 +171,7 @@ - + diff --git a/php/logs/form_processor.log b/php/logs/form_processor.log index 3557850..6a15a17 100644 --- a/php/logs/form_processor.log +++ b/php/logs/form_processor.log @@ -126,3 +126,11 @@ {"timestamp":"2025-11-24 16:49:45","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} {"timestamp":"2025-11-24 16:50:26","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} {"timestamp":"2025-11-24 16:50:28","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 18:02:33","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","current_logo"]}} +{"timestamp":"2025-11-24 18:02:35","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 18:31:48","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","logo","logo_name","logo_type"]}} +{"timestamp":"2025-11-24 18:31:48","level":"debug","message":"Estado logo antes de cURL","context":{"tmp_name":"C:\\Users\\User\\AppData\\Local\\Temp\\phpC357.tmp","exists":true,"readable":true,"size":133562,"error":0}} +{"timestamp":"2025-11-24 18:31:51","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} +{"timestamp":"2025-11-24 19:03:13","level":"debug","message":"Preparando campos para enviar a API","context":{"url":"http:\/\/127.0.0.1:8000\/api\/editUsuario","post_keys":["id","empresa","usuario","email","platf_pago","clave_publica","clave_privada","colorBrand","logo","logo_name","logo_type"]}} +{"timestamp":"2025-11-24 19:03:13","level":"debug","message":"Estado logo antes de cURL","context":{"tmp_name":"C:\\Users\\User\\AppData\\Local\\Temp\\php9AD4.tmp","exists":true,"readable":true,"size":49976,"error":0}} +{"timestamp":"2025-11-24 19:03:15","level":"success","message":"Usuario enviado a API","context":{"usuario":"DEMO","empresa":"DEMO PASARELA","ip":"127.0.0.1"}} diff --git a/portal.php b/portal.php index 09e5eb6..c661257 100644 --- a/portal.php +++ b/portal.php @@ -7,32 +7,11 @@

Panel de Administración

- -
-
- - - - -
- +
+ Humanergy Logo
- - -
-
- -
-
- - -
-
-
-
+
diff --git a/regUsuario.php b/regUsuario.php index 8113719..aa4309a 100644 --- a/regUsuario.php +++ b/regUsuario.php @@ -281,8 +281,8 @@ function obtenerNombreCursoPorId($cursos, $idBuscado) {
-

Registrar Usuario

-

Complete los datos para crear un nuevo usuario en el sistema

+

Registrar Nueva Pasarela

+

Complete los datos para crear una nueva pasarela en el sistema

@@ -291,11 +291,10 @@ function obtenerNombreCursoPorId($cursos, $idBuscado) { placeholder="Ej: Mi Empresa S.A.">
-
- - -
+ + + +
@@ -365,6 +364,17 @@ function obtenerNombreCursoPorId($cursos, $idBuscado) { } }); +