251 lines
11 KiB
PHP
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>
|