feat: integración WEBSms en configuración
- Nueva sección WEBSms en lab_configuracion.php con: - Switch activo/inactivo (sms_activo) - Campo URL base de la API (sms_url) - Campo API key / Bearer token (sms_api_key) - Campos de prueba: número + mensaje + botón Enviar - api/lab/test_sms.php: proxy al endpoint POST /api/sms/send con Authorization: Bearer, valida respuesta ok/error - save_config.php: permite guardar sms_url, sms_api_key, sms_activo Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
301b39ad0c
commit
21e7c6a836
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/**
|
||||
* POST /api/lab/test_sms.php
|
||||
* Envía un SMS de prueba via WEBSms.
|
||||
* Body JSON: { url, key, numero, mensaje }
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('POST');
|
||||
requireAdmin();
|
||||
|
||||
$datos = inputJson();
|
||||
$baseUrl = rtrim(trim($datos['url'] ?? ''), '/');
|
||||
$key = trim($datos['key'] ?? '');
|
||||
$numero = trim($datos['numero'] ?? '');
|
||||
$mensaje = trim($datos['mensaje'] ?? 'Prueba de conexión WEBSms');
|
||||
|
||||
if (!$baseUrl) jsonError('URL base requerida.');
|
||||
if (!$key) jsonError('API key requerida.');
|
||||
if (!$numero) jsonError('Número requerido.');
|
||||
if (!filter_var($baseUrl, FILTER_VALIDATE_URL)) jsonError('URL base inválida.');
|
||||
|
||||
// Sanitizar número: solo dígitos
|
||||
$numero = preg_replace('/\D/', '', $numero);
|
||||
if (strlen($numero) < 7) jsonError('Número inválido.');
|
||||
|
||||
$payload = json_encode([
|
||||
'numero' => $numero,
|
||||
'mensaje' => $mensaje,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
$endpoint = $baseUrl . '/api/sms/send';
|
||||
|
||||
$ch = curl_init($endpoint);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_POSTFIELDS => $payload,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
'Content-Type: application/json',
|
||||
'Authorization: Bearer ' . $key,
|
||||
],
|
||||
CURLOPT_TIMEOUT => 15,
|
||||
CURLOPT_SSL_VERIFYPEER => true,
|
||||
]);
|
||||
$raw = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if ($err) jsonError('Error de conexión: ' . $err, 502);
|
||||
if (!$raw) jsonError('Sin respuesta del servidor SMS.', 502);
|
||||
|
||||
$resp = json_decode($raw, true);
|
||||
if ($code >= 200 && $code < 300 && !empty($resp['ok'])) {
|
||||
jsonOk(['id' => $resp['id'] ?? null]);
|
||||
}
|
||||
|
||||
$msg = $resp['error'] ?? "Error HTTP {$code}";
|
||||
jsonError($msg, 502);
|
||||
Reference in New Issue
Block a user