return ( <div className="max-w-md mx-auto p-4 bg-gray-100 rounded-xl shadow-md"> <h2 className="text-xl font-bold mb-4">📱 Saldo Telcel</h2> <input type="tel" placeholder="Número Telcel (10 dígitos)" value=phone onChange=(e) => setPhone(e.target.value) className="w-full p-2 border rounded mb-3" /> <button onClick=consultarSaldo className="bg-red-600 text-white px-4 py-2 rounded w-full" disabled=loading > loading ? "Consultando..." : "Consultar saldo" </button>
router.post("/recarga", (req, res) => const phoneNumber, amount = req.body; const result = recarga(phoneNumber, amount); res.json(result); ); saldo telcel
saldo && !saldo.error && ( <div className="mt-4 bg-white p-3 rounded shadow"> <p className="text-lg font-semibold">💰 Saldo: $saldo.balance MXN</p> <p>📶 Datos: saldo.data.remaining saldo.data.unit</p> <p>⏳ Vence: saldo.data.expiry</p> <p>📞 Minutos: saldo.minutes.remaining</p> <p>✉️ SMS: saldo.sms.remaining</p> </div> ) saldo?.error && <p className="text-red-500 mt-2">saldo.error</p> </div> ); Paquetes vigentes\n3
// SaldoTelcel.jsx import useState from "react"; export default function SaldoTelcel() const [phone, setPhone] = useState(""); const [saldo, setSaldo] = useState(null); const [loading, setLoading] = useState(false); Paquetes vigentes\n3. Recargar ahora\n0. Salir"
const consultarSaldo = async () => setLoading(true); const res = await fetch("/api/saldo/consulta", method: "POST", headers: "Content-Type": "application/json" , body: JSON.stringify( phoneNumber: phone ) ); const data = await res.json(); setSaldo(data); setLoading(false); ;
function ussdMenu(step, input) if (step === 0) return message: "CON Saldo Telcel\n1. Consultar saldo\n2. Paquetes vigentes\n3. Recargar ahora\n0. Salir", step: 1 ; if (step === 1 && input === "1") const saldo = getSaldo("5523456789"); // dynamic number return message: `END Saldo actual: $$saldo.balance MXN\nDatos: $saldo.data.remaining $saldo.data.unit\nVence: $saldo.data.expiry`, step: -1 ; // More logic...