gatewayIp = env('SMS_GATEWAY_IP', '192.168.1.100'); // IP di default del dispositivo Android locale $this->apiKey = env('SMS_GATEWAY_API_KEY', 'default_local_key_netgescon'); $this->timeout = (int)env('SMS_GATEWAY_TIMEOUT', 5); } /** * Invia un messaggio SMS con codice OTP al numero di telefono specificato * connettendosi direttamente al gateway locale Android. */ public function sendOtp(string $phoneNumber, string $otpCode): bool { $message = "NetGescon - Codice di verifica OTP per aggiornamento anagrafica: {$otpCode}. Valido per 10 minuti."; return $this->sendSms($phoneNumber, $message); } /** * Invia un SMS generico tramite il gateway locale Android. */ public function sendSms(string $phoneNumber, string $message): bool { $url = "http://{$this->gatewayIp}/send"; $payload = [ 'to' => $phoneNumber, 'message' => $message, 'api_key' => $this->apiKey, ]; try { Log::info("Invio SMS local-gateway in corso a {$phoneNumber} tramite {$url}"); // Chiamata HTTP al dispositivo Android in LAN $response = Http::timeout($this->timeout) ->asJson() ->post($url, $payload); if ($response->successful()) { Log::info("SMS inviato con successo a {$phoneNumber}. Risposta gateway: " . $response->body()); return true; } Log::error("Mancato invio SMS locale. Risposta gateway fallita: " . $response->status() . " - " . $response->body()); return false; } catch (Exception $e) { Log::error("Errore di connessione all'SMS Gateway Android locale ({$url}): " . $e->getMessage()); // Fallback locale simulato per lo sviluppo/testing offline if (config('app.debug')) { Log::warning("[DEBUG ON] SMS inviato in simulazione a {$phoneNumber}: {$message}"); return true; } return false; } } }