Files
whatsapp/whatsapp_tester.php
T
2026-01-12 11:06:43 -05:00

251 lines
11 KiB
PHP

<?php
/**
* Tester de conectividad WhatsApp Business API
* Verifica que la configuración de WhatsApp esté funcionando
*/
require_once 'config/config.php';
header('Content-Type: text/html; charset=utf-8');
// Función para probar la conectividad con WhatsApp API
function testWhatsAppAPI() {
$results = [];
// Test 1: Validar configuración
$errors = validateWhatsAppConfig();
$results['config'] = [
'status' => empty($errors) ? 'success' : 'error',
'message' => empty($errors) ? 'Configuración válida' : implode(', ', $errors),
'details' => empty($errors) ? 'Todos los tokens están configurados' : 'Completa la configuración en .env o config.php'
];
if (!empty($errors)) {
return $results; // No continuar si la configuración es inválida
}
// Test 2: Probar conectividad básica
try {
$whatsappService = new WhatsAppService();
$results['connectivity'] = [
'status' => 'success',
'message' => 'Servicio de WhatsApp inicializado correctamente',
'details' => 'La clase WhatsAppService está funcionando'
];
} catch (Exception $e) {
$results['connectivity'] = [
'status' => 'error',
'message' => 'Error inicializando servicio: ' . $e->getMessage(),
'details' => 'Verifica la configuración y conexión a base de datos'
];
return $results;
}
// Test 3: Verificar Phone Number ID
try {
$url = WHATSAPP_API_URL . WHATSAPP_PHONE_NUMBER_ID;
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . WHATSAPP_TOKEN,
'Content-Type: application/json'
],
CURLOPT_TIMEOUT => 10,
CURLOPT_CONNECTTIMEOUT => 5
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
$results['api_test'] = [
'status' => 'error',
'message' => 'Error de conectividad: ' . $error,
'details' => 'Problema de red o configuración SSL'
];
} elseif ($httpCode === 200) {
$results['api_test'] = [
'status' => 'success',
'message' => 'API de WhatsApp respondió correctamente',
'details' => 'Token y Phone ID válidos'
];
} elseif ($httpCode === 401) {
$results['api_test'] = [
'status' => 'error',
'message' => 'Token de acceso inválido o expirado',
'details' => 'Genera un nuevo token en Facebook for Developers'
];
} elseif ($httpCode === 404) {
$results['api_test'] = [
'status' => 'error',
'message' => 'Phone Number ID no encontrado',
'details' => 'Verifica el Phone Number ID en la configuración'
];
} else {
$results['api_test'] = [
'status' => 'warning',
'message' => "Respuesta inesperada: HTTP $httpCode",
'details' => 'La API respondió pero con un código inusual'
];
}
} catch (Exception $e) {
$results['api_test'] = [
'status' => 'error',
'message' => 'Error probando API: ' . $e->getMessage(),
'details' => 'Excepción durante la prueba de conectividad'
];
}
return $results;
}
$testResults = testWhatsAppAPI();
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test WhatsApp API - Bot Manager</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<style>
.test-item {
padding: 15px;
margin: 10px 0;
border-radius: 8px;
border: 1px solid #dee2e6;
}
.test-success { background-color: #d4edda; border-color: #c3e6cb; }
.test-warning { background-color: #fff3cd; border-color: #ffeaa7; }
.test-error { background-color: #f8d7da; border-color: #f5c6cb; }
</style>
</head>
<body>
<div class="container mt-5">
<div class="row">
<div class="col-md-8 offset-md-2">
<h1 class="text-center mb-4">
<i class="fab fa-whatsapp text-success"></i>
Test de Conectividad WhatsApp API
</h1>
<div class="card mb-4">
<div class="card-header">
<h5><i class="fas fa-info-circle"></i> Configuración Actual</h5>
</div>
<div class="card-body">
<table class="table table-sm">
<tr>
<td><strong>Token:</strong></td>
<td><?= WHATSAPP_TOKEN !== 'TU_TOKEN_DE_WHATSAPP_AQUI' ? '***CONFIGURADO***' : 'NO CONFIGURADO' ?></td>
</tr>
<tr>
<td><strong>Phone ID:</strong></td>
<td><?= WHATSAPP_PHONE_NUMBER_ID !== 'TU_PHONE_ID_AQUI' ? WHATSAPP_PHONE_NUMBER_ID : 'NO CONFIGURADO' ?></td>
</tr>
<tr>
<td><strong>Webhook Token:</strong></td>
<td><?= WEBHOOK_VERIFY_TOKEN ?></td>
</tr>
<tr>
<td><strong>API URL:</strong></td>
<td><?= WHATSAPP_API_URL ?></td>
</tr>
</table>
</div>
</div>
<?php foreach ($testResults as $testName => $test): ?>
<?php
$statusClass = 'test-' . $test['status'];
$iconClass = [
'success' => 'fa-check-circle text-success',
'error' => 'fa-times-circle text-danger',
'warning' => 'fa-exclamation-triangle text-warning'
][$test['status']];
$testTitles = [
'config' => 'Validación de Configuración',
'connectivity' => 'Inicialización del Servicio',
'api_test' => 'Conectividad con WhatsApp API'
];
?>
<div class="test-item <?= $statusClass ?>">
<h6><i class="fas <?= $iconClass ?>"></i> <?= $testTitles[$testName] ?? $testName ?></h6>
<p class="mb-1"><strong><?= $test['message'] ?></strong></p>
<small class="text-muted"><?= $test['details'] ?></small>
</div>
<?php endforeach; ?>
<div class="card mt-4">
<div class="card-header">
<h5><i class="fas fa-tools"></i> Próximos Pasos</h5>
</div>
<div class="card-body">
<?php
$allSuccess = array_reduce($testResults, function($carry, $test) {
return $carry && $test['status'] === 'success';
}, true);
?>
<?php if ($allSuccess): ?>
<div class="alert alert-success">
<h5><i class="fas fa-thumbs-up"></i> ¡Perfecto!</h5>
<p>Tu configuración de WhatsApp está funcionando correctamente.</p>
<p><strong>Ya puedes:</strong></p>
<ul>
<li>Configurar el webhook en Facebook for Developers</li>
<li>Empezar a recibir y enviar mensajes</li>
<li>Usar el panel de administración</li>
</ul>
</div>
<?php else: ?>
<div class="alert alert-warning">
<h5><i class="fas fa-wrench"></i> Configuración Requerida</h5>
<p>Necesitas completar la configuración antes de continuar:</p>
<ol>
<li>Obtén tu token de WhatsApp Business API desde <a href="https://developers.facebook.com/" target="_blank">Facebook for Developers</a></li>
<li>Configura los valores en tu archivo <code>.env</code> o <code>config.php</code></li>
<li>Vuelve a ejecutar esta prueba</li>
</ol>
</div>
<?php endif; ?>
<hr>
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
<a href="system_validator.php" class="btn btn-secondary">
<i class="fas fa-check"></i> Validador General
</a>
<a href="quick_config.php" class="btn btn-primary">
<i class="fas fa-cog"></i> Configuración Rápida
</a>
<?php if ($allSuccess): ?>
<a href="index.php" class="btn btn-success">
<i class="fas fa-rocket"></i> Ir al Panel
</a>
<?php endif; ?>
</div>
</div>
</div>
<div class="text-center mt-4">
<small class="text-muted">
<i class="fas fa-sync-alt"></i>
<a href="<?= $_SERVER['REQUEST_URI'] ?>">Recargar página</a> para volver a probar
</small>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>