Primer Commit
This commit is contained in:
229
php/funciones.php
Normal file
229
php/funciones.php
Normal file
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
include(__DIR__."/../rutasApi.php");
|
||||
function generarCodigoCupon($longitud = 8) {
|
||||
$caracteres = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
$codigo = '';
|
||||
for ($i = 0; $i < $longitud; $i++) {
|
||||
$codigo .= $caracteres[rand(0, strlen($caracteres) - 1)];
|
||||
}
|
||||
return $codigo;
|
||||
}
|
||||
|
||||
function crearCupon($post) {
|
||||
global $ruta,$api_key_definition,$api_key;
|
||||
$datosCupon = array(
|
||||
'codigo' => $post["codigo"],
|
||||
'descuento' => $post["descuento"],
|
||||
'curso_id' => $post["curso_id"],
|
||||
'fecha_inicio' => $post["fecha_inicio"],
|
||||
'fecha_fin' => $post["fecha_fin"],
|
||||
'usos_maximos' => $post["usos_maximos"],
|
||||
'activo' => "1",
|
||||
);
|
||||
|
||||
$url = $ruta . "/ttl/registerCuopon";
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $url, //URL A LA QUE SE CONECTA
|
||||
CURLOPT_RETURNTRANSFER => true, //DEVUELVE EL RESULTADO COMO UNA CADENA DEL TIPO CURL_EXEC
|
||||
CURLOPT_FOLLOWLOCATION => true, //SIGUE EL ENCABEZADO QUE LE ENVÍE EL SERVIDOR
|
||||
CURLOPT_ENCODING => "", // PERMITE DECODIFICAR LA RESPUESTA Y PUEDE SER"IDENTITY", "DEFLATE", Y "GZIP", SI ESTÁ VACÍO RECIBE TODOS LOS DISPONIBLES.
|
||||
CURLOPT_MAXREDIRS => 10, // SI USAMOS CURLOPT_FOLLOWLOCATION LE DICE EL MÁXIMO DE ENCABEZADOS A SEGUIR
|
||||
CURLOPT_TIMEOUT => 0, // TIEMPO MÁXIMO PARA EJECUTAR
|
||||
CURLOPT_CONNECTTIMEOUT => 0, // TIEMPO MÁXIMO PARA CONECTAR
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // USA LA VERSIÓN DECLARADA
|
||||
CURLOPT_CUSTOMREQUEST => "POST", // EL TIPO DE PETICIÓN, PUEDE SER PUT, POST, GET O DELETE DEPENDIENDO DEL SERVICIO
|
||||
CURLOPT_POSTFIELDS => $datosCupon, //DATOS A ENVIAR EN EL CUERPO DE LA PETICIÓN
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"$api_key_definition: $api_key"
|
||||
), //CONFIGURA LAS CABECERAS ENVIADAS AL SERVICIO
|
||||
));
|
||||
|
||||
|
||||
return $result = curl_exec($curl);
|
||||
}
|
||||
|
||||
|
||||
function validarCupon($codigo, $curso_id = null) {
|
||||
global $pdo;
|
||||
|
||||
$sql = "SELECT * FROM cupones WHERE codigo = ? AND activo = TRUE
|
||||
AND fecha_inicio <= CURDATE() AND fecha_fin >= CURDATE()
|
||||
AND (usos_actuales < usos_maximos OR usos_maximos = 0)";
|
||||
|
||||
if ($curso_id) {
|
||||
$sql .= " AND (curso_id = ? OR curso_id IS NULL)";
|
||||
}
|
||||
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$params = $curso_id ? [$codigo, $curso_id] : [$codigo];
|
||||
$stmt->execute($params);
|
||||
|
||||
return $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
function registrarUsoCupon($cupon_id, $ip_cliente = null) {
|
||||
global $pdo;
|
||||
|
||||
// Registrar el uso
|
||||
$stmt = $pdo->prepare("INSERT INTO uso_cupones (cupon_id, ip_cliente) VALUES (?, ?)");
|
||||
$stmt->execute([$cupon_id, $ip_cliente]);
|
||||
|
||||
// Incrementar el contador de usos
|
||||
$stmt = $pdo->prepare("UPDATE cupones SET usos_actuales = usos_actuales + 1 WHERE id = ?");
|
||||
$stmt->execute([$cupon_id]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function obtenerCursos() {
|
||||
global $ruta,$api_key_definition,$api_key;
|
||||
$url = $ruta . "/ttl/getCourses";
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $url, //URL A LA QUE SE CONECTA
|
||||
CURLOPT_RETURNTRANSFER => true, //DEVUELVE EL RESULTADO COMO UNA CADENA DEL TIPO CURL_EXEC
|
||||
CURLOPT_FOLLOWLOCATION => true, //SIGUE EL ENCABEZADO QUE LE ENVÍE EL SERVIDOR
|
||||
CURLOPT_ENCODING => "", // PERMITE DECODIFICAR LA RESPUESTA Y PUEDE SER"IDENTITY", "DEFLATE", Y "GZIP", SI ESTÁ VACÍO RECIBE TODOS LOS DISPONIBLES.
|
||||
CURLOPT_MAXREDIRS => 10, // SI USAMOS CURLOPT_FOLLOWLOCATION LE DICE EL MÁXIMO DE ENCABEZADOS A SEGUIR
|
||||
CURLOPT_TIMEOUT => 0, // TIEMPO MÁXIMO PARA EJECUTAR
|
||||
CURLOPT_CONNECTTIMEOUT => 0, // TIEMPO MÁXIMO PARA CONECTAR
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // USA LA VERSIÓN DECLARADA
|
||||
CURLOPT_CUSTOMREQUEST => "GET", // EL TIPO DE PETICIÓN, PUEDE SER PUT, POST, GET O DELETE DEPENDIENDO DEL SERVICIO
|
||||
CURLOPT_POSTFIELDS => array(), //DATOS A ENVIAR EN EL CUERPO DE LA PETICIÓN
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"$api_key_definition: $api_key"
|
||||
), //CONFIGURA LAS CABECERAS ENVIADAS AL SERVICIO
|
||||
));
|
||||
|
||||
|
||||
$result = curl_exec($curl);
|
||||
return json_decode($result,true);
|
||||
}
|
||||
|
||||
function obtenerCupones() {
|
||||
global $ruta,$api_key_definition,$api_key;
|
||||
$url = $ruta . "/ttl/getCoupons";
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $url, //URL A LA QUE SE CONECTA
|
||||
CURLOPT_RETURNTRANSFER => true, //DEVUELVE EL RESULTADO COMO UNA CADENA DEL TIPO CURL_EXEC
|
||||
CURLOPT_FOLLOWLOCATION => true, //SIGUE EL ENCABEZADO QUE LE ENVÍE EL SERVIDOR
|
||||
CURLOPT_ENCODING => "", // PERMITE DECODIFICAR LA RESPUESTA Y PUEDE SER"IDENTITY", "DEFLATE", Y "GZIP", SI ESTÁ VACÍO RECIBE TODOS LOS DISPONIBLES.
|
||||
CURLOPT_MAXREDIRS => 10, // SI USAMOS CURLOPT_FOLLOWLOCATION LE DICE EL MÁXIMO DE ENCABEZADOS A SEGUIR
|
||||
CURLOPT_TIMEOUT => 0, // TIEMPO MÁXIMO PARA EJECUTAR
|
||||
CURLOPT_CONNECTTIMEOUT => 0, // TIEMPO MÁXIMO PARA CONECTAR
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // USA LA VERSIÓN DECLARADA
|
||||
CURLOPT_CUSTOMREQUEST => "GET", // EL TIPO DE PETICIÓN, PUEDE SER PUT, POST, GET O DELETE DEPENDIENDO DEL SERVICIO
|
||||
CURLOPT_POSTFIELDS => array(), //DATOS A ENVIAR EN EL CUERPO DE LA PETICIÓN
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"$api_key_definition: $api_key"
|
||||
), //CONFIGURA LAS CABECERAS ENVIADAS AL SERVICIO
|
||||
));
|
||||
|
||||
|
||||
$result = curl_exec($curl);
|
||||
return json_decode($result,true);
|
||||
}
|
||||
|
||||
function editarCupon($post)
|
||||
{
|
||||
global $ruta,$api_key_definition,$api_key;
|
||||
$datosCupon = array(
|
||||
'codigo' => $post["codigo"],
|
||||
'descuento' => $post["descuento"],
|
||||
'curso_id' => $post["curso_id"],
|
||||
'fecha_inicio' => $post["fecha_inicio"],
|
||||
'fecha_fin' => $post["fecha_fin"],
|
||||
'usos_maximos' => $post["usos_maximos"],
|
||||
'activo' => $post["activo"],
|
||||
);
|
||||
|
||||
|
||||
$url = $ruta . "/ttl/editCuopon";
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $url, //URL A LA QUE SE CONECTA
|
||||
CURLOPT_RETURNTRANSFER => true, //DEVUELVE EL RESULTADO COMO UNA CADENA DEL TIPO CURL_EXEC
|
||||
CURLOPT_FOLLOWLOCATION => true, //SIGUE EL ENCABEZADO QUE LE ENVÍE EL SERVIDOR
|
||||
CURLOPT_ENCODING => "", // PERMITE DECODIFICAR LA RESPUESTA Y PUEDE SER"IDENTITY", "DEFLATE", Y "GZIP", SI ESTÁ VACÍO RECIBE TODOS LOS DISPONIBLES.
|
||||
CURLOPT_MAXREDIRS => 10, // SI USAMOS CURLOPT_FOLLOWLOCATION LE DICE EL MÁXIMO DE ENCABEZADOS A SEGUIR
|
||||
CURLOPT_TIMEOUT => 0, // TIEMPO MÁXIMO PARA EJECUTAR
|
||||
CURLOPT_CONNECTTIMEOUT => 0, // TIEMPO MÁXIMO PARA CONECTAR
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // USA LA VERSIÓN DECLARADA
|
||||
CURLOPT_CUSTOMREQUEST => "POST", // EL TIPO DE PETICIÓN, PUEDE SER PUT, POST, GET O DELETE DEPENDIENDO DEL SERVICIO
|
||||
CURLOPT_POSTFIELDS => $datosCupon, //DATOS A ENVIAR EN EL CUERPO DE LA PETICIÓN
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"$api_key_definition: $api_key"
|
||||
), //CONFIGURA LAS CABECERAS ENVIADAS AL SERVICIO
|
||||
));
|
||||
|
||||
|
||||
return $result = curl_exec($curl);
|
||||
}
|
||||
|
||||
|
||||
function eliminarCupon($post)
|
||||
{
|
||||
global $ruta,$api_key_definition,$api_key;
|
||||
$datosCupon = array(
|
||||
'codigo' => $post["codigo"]
|
||||
);
|
||||
|
||||
|
||||
$url = $ruta . "/ttl/deleteCuopon";
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $url, //URL A LA QUE SE CONECTA
|
||||
CURLOPT_RETURNTRANSFER => true, //DEVUELVE EL RESULTADO COMO UNA CADENA DEL TIPO CURL_EXEC
|
||||
CURLOPT_FOLLOWLOCATION => true, //SIGUE EL ENCABEZADO QUE LE ENVÍE EL SERVIDOR
|
||||
CURLOPT_ENCODING => "", // PERMITE DECODIFICAR LA RESPUESTA Y PUEDE SER"IDENTITY", "DEFLATE", Y "GZIP", SI ESTÁ VACÍO RECIBE TODOS LOS DISPONIBLES.
|
||||
CURLOPT_MAXREDIRS => 10, // SI USAMOS CURLOPT_FOLLOWLOCATION LE DICE EL MÁXIMO DE ENCABEZADOS A SEGUIR
|
||||
CURLOPT_TIMEOUT => 0, // TIEMPO MÁXIMO PARA EJECUTAR
|
||||
CURLOPT_CONNECTTIMEOUT => 0, // TIEMPO MÁXIMO PARA CONECTAR
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // USA LA VERSIÓN DECLARADA
|
||||
CURLOPT_CUSTOMREQUEST => "POST", // EL TIPO DE PETICIÓN, PUEDE SER PUT, POST, GET O DELETE DEPENDIENDO DEL SERVICIO
|
||||
CURLOPT_POSTFIELDS => $datosCupon, //DATOS A ENVIAR EN EL CUERPO DE LA PETICIÓN
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"$api_key_definition: $api_key"
|
||||
), //CONFIGURA LAS CABECERAS ENVIADAS AL SERVICIO
|
||||
));
|
||||
|
||||
|
||||
return $result = curl_exec($curl);
|
||||
}
|
||||
|
||||
|
||||
if (isset($_GET['accion']) && $_GET['accion'] == 'obtener_codigo') {
|
||||
// Llamar a la función para generar el código
|
||||
$codigoGenerado = generarCodigoCupon();
|
||||
|
||||
// Retornar el código generado como respuesta
|
||||
echo $codigoGenerado;
|
||||
}
|
||||
elseif(isset($_POST['accion']) && $_POST['accion'] == 'editar_codigo')
|
||||
{
|
||||
$codigoGenerado = editarCupon($_POST);
|
||||
|
||||
// Retornar el código generado como respuesta
|
||||
echo $codigoGenerado;
|
||||
}
|
||||
elseif(isset($_POST['accion']) && $_POST['accion'] == 'elimnar_codigo')
|
||||
{
|
||||
$codigoGenerado = eliminarCupon($_POST);
|
||||
|
||||
// Retornar el código generado como respuesta
|
||||
echo $codigoGenerado;
|
||||
}
|
||||
elseif(isset($_POST['accion']) && $_POST['accion'] == 'anadir_codigo')
|
||||
{
|
||||
$codigoGenerado = crearCupon($_POST);
|
||||
|
||||
// Retornar el código generado como respuesta
|
||||
echo $codigoGenerado;
|
||||
}
|
||||
37
php/logs/form_processor.log
Normal file
37
php/logs/form_processor.log
Normal file
@@ -0,0 +1,37 @@
|
||||
{"timestamp":"2025-08-01 23:02:02","level":"error","message":"Error general en process_user.php","context":{"error":"Error de conexi\u00f3n con la API: Operation timed out after 30010 milliseconds with 0 bytes received","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:03:30","level":"error","message":"Error general en process_user.php","context":{"error":"Error de conexi\u00f3n con la API: Operation timed out after 30001 milliseconds with 0 bytes received","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:12:22","level":"error","message":"Error general en process_user.php","context":{"error":"Error de conexi\u00f3n con la API: Operation timed out after 30013 milliseconds with 0 bytes received","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:13:30","level":"error","message":"Error general en process_user.php","context":{"error":"Error de conexi\u00f3n con la API: Operation timed out after 30014 milliseconds with 0 bytes received","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:16:20","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:22:19","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:23:48","level":"success","message":"Usuario enviado a API","context":{"usuario":"admi","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:25:18","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:26:29","level":"success","message":"Usuario enviado a API","context":{"usuario":"adminqq","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:32:50","level":"success","message":"Usuario enviado a API","context":{"usuario":"admins","empresa":"KINGDOM HERE GROUP SAPIs","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:36:42","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:37:44","level":"error","message":"Error general en process_user.php","context":{"error":"Respuesta inv\u00e1lida de la API: Array\n(\n [empresa] => KINGDOM PROJECT A.C\n [usuario] => admin\n [email] => facturasclientes@gafsacomm.com\n [platf_pago] => stripe\n [clavePublica] => sadasdasd\n [clavePrivada] => asdsdd\n)\n","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:38:13","level":"error","message":"Error general en process_user.php","context":{"error":"Respuesta inv\u00e1lida de la API: ","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:38:45","level":"error","message":"Error general en process_user.php","context":{"error":"Respuesta inv\u00e1lida de la API: {\"empresa\":\"KINGDOM PROJECT A.C\",\"usuario\":\"admin\",\"email\":\"facturasclientes@gafsacomm.com\",\"platf_pago\":\"stripe\",\"clavePublica\":\"sadasdasd\",\"clavePrivada\":\"asdsdd\"}{\"success\":false,\"message\":\"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'hmngy_pasarela_usuarios.usuario' (Connection: mysql, SQL: insert into `hmngy_pasarela_usuarios` (`empresa`, `usuario`, `email`, `platf_pago`, `clave_publica`, `clave_privada`, `estado`, `fecha_creacion`, `fecha_actualizacion`) values (KINGDOM PROJECT A.C, admin, facturasclientes@gafsacomm.com, stripe, , , activo, 2025-08-01 23:38:45, 2025-08-01 23:38:45))\"}","trace":"#0 C:\\laragon\\www\\pasarela\\php\\process_user.php(37): sendToLaravelAPI(Array, Array)\n#1 {main}","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:41:02","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:42:40","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:45:35","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:46:07","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:49:01","level":"success","message":"Usuario enviado a API","context":{"usuario":"asd","empresa":"sad","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:57:56","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-01 23:58:55","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM HERE GROUP SAPI","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-02 00:00:39","level":"success","message":"Usuario enviado a API","context":{"usuario":"Demo","empresa":"Demo","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-02 00:17:31","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-02 00:20:13","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-02 00:31:01","level":"success","message":"Usuario enviado a API","context":{"usuario":"admins","empresa":"Demos","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-02 00:31:46","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:21:51","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:23:10","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:25:54","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:27:31","level":"success","message":"Usuario enviado a API","context":{"usuario":"adminq","empresa":"KINGDOM PROJECT A.Cq","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:28:44","level":"success","message":"Usuario enviado a API","context":{"usuario":"Sistemas","empresa":"Demo","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:30:21","level":"success","message":"Usuario enviado a API","context":{"usuario":"asAS","empresa":"asA","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:31:59","level":"success","message":"Usuario enviado a API","context":{"usuario":"asd","empresa":"KINGDOM HERE GROUP SAPI","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:32:39","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:44:12","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 14:54:08","level":"success","message":"Usuario enviado a API","context":{"usuario":"admin","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
{"timestamp":"2025-08-04 23:34:12","level":"success","message":"Usuario enviado a API","context":{"usuario":"LuisAngel","empresa":"KINGDOM PROJECT A.C","ip":"127.0.0.1"}}
|
||||
328
php/process_user.php
Normal file
328
php/process_user.php
Normal file
@@ -0,0 +1,328 @@
|
||||
<?php
|
||||
include(__DIR__."/../rutasApi.php");
|
||||
// ============================================================================
|
||||
// ARCHIVO PHP INTERMEDIO PARA PROCESAR FORMULARIO Y ENVIAR A API LARAVEL
|
||||
// process_user.php
|
||||
// ============================================================================
|
||||
|
||||
// Configuración de headers para JSON
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *'); // Ajustar según necesidades de CORS
|
||||
header('Access-Control-Allow-Methods: POST');
|
||||
header('Access-Control-Allow-Headers: Content-Type');
|
||||
|
||||
// Solo permitir métodos POST
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode([
|
||||
'success' => false,
|
||||
'message' => 'Método no permitido. Solo se acepta POST.'
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Configuración de la API Laravel
|
||||
$API_CONFIG = [
|
||||
'base_url' => $ruta.'/stripe', // Cambiar por tu URL de Laravel
|
||||
'endpoint' => '/regUsuario', // 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.'
|
||||
]);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 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'
|
||||
];
|
||||
|
||||
// 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 = [
|
||||
'empresa' => trim($_POST['empresa']),
|
||||
'usuario' => trim($_POST['usuario']),
|
||||
'email' => strtolower(trim($_POST['email'])),
|
||||
'platf_pago' => !empty($_POST['platf_pago']) ? $_POST['platf_pago'] : 'stripe',
|
||||
'clavePublica' => formatKey($_POST['clavePublica']),
|
||||
'clavePrivada' => formatKey($_POST['clavePrivada'])
|
||||
];
|
||||
|
||||
|
||||
|
||||
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 datos para envío
|
||||
$postData = [];
|
||||
|
||||
// Configurar cURL
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_POSTFIELDS => $formData,
|
||||
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 => [
|
||||
'Accept: application/json',
|
||||
'X-Requested-With: XMLHttpRequest'
|
||||
]
|
||||
]);
|
||||
|
||||
// Agregar token de autenticación si existe
|
||||
if (!empty($config['auth_token'])) {
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge(
|
||||
curl_getopt($ch, CURLOPT_HTTPHEADER),
|
||||
['Authorization: Bearer ' . $config['auth_token']]
|
||||
));
|
||||
}
|
||||
|
||||
// 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']]);
|
||||
}
|
||||
|
||||
return [
|
||||
'name' => $logoFile['name'],
|
||||
'type' => $logoFile['type'],
|
||||
'tmp_name' => $logoFile['tmp_name'],
|
||||
'size' => $logoFile['size']
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user