conexion con api winsaai
This commit is contained in:
163
app/controllers/proveedores.php
Normal file
163
app/controllers/proveedores.php
Normal file
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
// app/controllers/proveedores.php
|
||||
|
||||
session_start();
|
||||
|
||||
// 1) Composer autoload (phpdotenv y demás libs)
|
||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||
|
||||
// 2) Carga nuestro helper de entorno y dispara la carga de .env
|
||||
require_once __DIR__ . '/../helpers/env.php';
|
||||
loadEnv();
|
||||
|
||||
/**
|
||||
* Obtiene (y cachea en sesión) el JWT de la API usando las credenciales de $_ENV
|
||||
*/
|
||||
function getApiToken(): ?string
|
||||
{
|
||||
if (!empty($_SESSION['api_token'])) {
|
||||
return $_SESSION['api_token'];
|
||||
}
|
||||
|
||||
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login';
|
||||
$user = $_ENV['API_USER'] ?? '';
|
||||
$pass = $_ENV['API_PASS'] ?? '';
|
||||
$body = json_encode(['username'=>$user,'password'=>$pass]);
|
||||
|
||||
error_log("[getApiToken] POST $url → body: $body");
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
|
||||
CURLOPT_POSTFIELDS => $body,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 5,
|
||||
]);
|
||||
$resp = curl_exec($ch);
|
||||
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
error_log("[getApiToken] HTTP $http → resp: $resp");
|
||||
|
||||
if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) {
|
||||
$_SESSION['api_token'] = $data['token'];
|
||||
return $data['token'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /IMPORTADORES/proveedores
|
||||
* Muestra la vista de listado
|
||||
*/
|
||||
function index()
|
||||
{
|
||||
lista();
|
||||
}
|
||||
|
||||
function lista()
|
||||
{
|
||||
if (empty($_SESSION['usuario_id'])) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
include __DIR__ . '/../../views/proveedores/lista.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /IMPORTADORES/proveedores/ajax_lista
|
||||
* Devuelve JSON para DataTables
|
||||
*/
|
||||
/**
|
||||
* GET /IMPORTADORES/proveedores/ajax_lista
|
||||
* Devuelve JSON para DataTables (siempre HTTP 200)
|
||||
*/
|
||||
function ajax_lista()
|
||||
{
|
||||
// 1) Fijamos el header JSON
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
// 2) Obtener o renovar token
|
||||
$token = getApiToken();
|
||||
if (!$token) {
|
||||
error_log('[ajax_lista] Sin token válido');
|
||||
// Devolvemos estructura vacía
|
||||
echo json_encode(['data' => []]);
|
||||
return;
|
||||
}
|
||||
|
||||
// 3) Construimos la URL de la API
|
||||
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
|
||||
$url = $apiBase . '/proveedores';
|
||||
error_log("[ajax_lista] GET $url");
|
||||
|
||||
// 4) Ejecutamos cURL
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'],
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 5,
|
||||
]);
|
||||
$resp = curl_exec($ch);
|
||||
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
error_log("[ajax_lista] HTTP $status → $resp");
|
||||
|
||||
// 5) Parseamos y formateamos
|
||||
$dataList = [];
|
||||
if ($status === 200 && ($json = json_decode($resp, true)) && is_array($json)) {
|
||||
foreach ($json as $p) {
|
||||
$clave = htmlspecialchars($p['Clave'] ?? '', ENT_QUOTES);
|
||||
$dataList[] = [
|
||||
$clave,
|
||||
htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Telefono']?? '', ENT_QUOTES),
|
||||
// Acciones
|
||||
"<a href=\"/IMPORTADORES/proveedores/editar?clave=" . rawurlencode($clave) . "\" class=\"btn btn-sm btn-primary\">✏️</a>
|
||||
<button class=\"btn btn-sm btn-danger\" onclick=\"confirmDelete('{$clave}')\">🗑️</button>"
|
||||
];
|
||||
}
|
||||
} else {
|
||||
error_log('[ajax_lista] Respuesta inválida o status != 200');
|
||||
}
|
||||
|
||||
// 6) Devolvemos siempre HTTP 200 con data (posiblemente vacío)
|
||||
echo json_encode(['data' => $dataList]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* GET /IMPORTADORES/proveedores/eliminar
|
||||
* Llama a DELETE /api/proveedores/:clave y redirige
|
||||
*/
|
||||
function eliminar()
|
||||
{
|
||||
$token = getApiToken();
|
||||
$clave = $_GET['clave'] ?? '';
|
||||
if (!$token || !$clave) {
|
||||
header('Location: /IMPORTADORES/proveedores');
|
||||
exit;
|
||||
}
|
||||
|
||||
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/api/proveedores/' . urlencode($clave);
|
||||
error_log("[eliminar] DELETE $url");
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_CUSTOMREQUEST => 'DELETE',
|
||||
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token",'Accept: application/json'],
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 5,
|
||||
]);
|
||||
curl_exec($ch);
|
||||
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
header('Location: /IMPORTADORES/proveedores?deleted=' . ($status===200||$status===204 ? 'ok':'error'));
|
||||
exit;
|
||||
}
|
||||
Reference in New Issue
Block a user