Files
Lizandro GuarnizoandClaude Sonnet 4.6 21e7c6a836 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>
2026-06-23 23:27:24 -05:00

60 lines
1.7 KiB
PHP

<?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);