Documentation
← Retour à l'accueilPlateforme auto-hébergée pour vendre des tickets WiFi MikroTik avec paiement Mobile Money. Node.js + PostgreSQL + Nginx.
Introduction
IFIAAS WiFi Platform est une solution 100% gratuite et auto-hébergée qui permet de vendre automatiquement des tickets WiFi MikroTik avec Mobile Money (MTN, Moov, Orange).
Stack technique
| Composant | Technologie |
|---|---|
| Backend | Node.js 20 + Express.js |
| Base de données | PostgreSQL 15 |
| Frontend | HTML + TailwindCSS + Vanilla JS |
| PDFKit | |
| QR Codes | node-qrcode |
| Serveur web | Nginx (reverse proxy) |
| Process manager | PM2 |
| Paiements | FedaPay + FeexPay |
Installation VPS
Prérequis : VPS Ubuntu 22.04 LTS, minimum 2GB RAM, domaine pointant vers le serveur.
Installation automatique
# Télécharger et décompresser le projet
unzip ifiaas-wifi-platform.zip
cd ifiaas-wifi
# Lancer le script d'installation
bash deploy.sh
Le script installe automatiquement Node.js, PostgreSQL, Nginx, PM2 et configure le SSL.
Configuration manuelle .env
NODE_ENV=production
PORT=3000
BASE_URL=https://wifi.ifiaas.com
DB_HOST=localhost
DB_NAME=ifiaas_wifi
DB_USER=ifiaas_user
DB_PASSWORD=votre_mot_de_passe
ENCRYPTION_KEY=32_caracteres_aleatoires
SESSION_SECRET=64_caracteres_aleatoires
Commandes utiles
npm run migrate # Appliquer les migrations DB
pm2 start ecosystem.config.js
pm2 logs ifiaas-wifi # Voir les logs
pm2 restart ifiaas-wifi
Accès Magic Link
IFIAAS utilise un système d'accès sans mot de passe. Un lien unique sécurisé suffit pour accéder au dashboard.
Cliquez "Démarrer"
Un token sécurisé de 64 caractères est généré (AES-256-GCM).
Sauvegardez le lien
Téléchargez le fichier TXT de sauvegarde. Sans ce lien, l'accès est impossible.
Accédez au dashboard
Le lien reste valide 30 jours par défaut. Régénérez-le depuis le dashboard si besoin.
⚠️ Important
Pour retrouver votre dashboard : utilisez le bouton "Se connecter" sur la page d'accueil et collez votre token ou lien sauvegardé.
Connexion MikroTik
Le MikroTik communique avec le serveur via HTTPS Polling toutes les 5 secondes. Aucun port ouvert sur le MikroTik n'est nécessaire.
MikroTik (derrière NAT/CGNAT)
→ POST https://wifi.ifiaas.com/api/mikrotik/check
→ Header: X-Router-Token: <token>
← { commands: [...] } ← Serveur répond avec commandes en attente
Architecture polling
| Paramètre | Valeur |
|---|---|
| Fréquence | 5 secondes |
| Timeout | 8 secondes |
| Retry max | 3 tentatives |
| Détection offline | 30 secondes sans heartbeat |
Script RouterOS
Depuis votre dashboard → section MikroTik → cliquez ⬇️ Script pour télécharger le fichier .rsc.
Installation manuelle
# Dans le terminal RouterOS (Winbox ou SSH)
# 1. Créer le script de polling
/system script add name="ifiaas-poll" source="..."
# 2. Créer le script de sync profils
/system script add name="ifiaas-sync" source="..."
# 3. Planifier le polling
/system scheduler add name="ifiaas-scheduler" interval=5s on-event="ifiaas-poll"
# 4. Première synchronisation
/system script run ifiaas-sync
# 5. Vérifier les logs
/log print where message~"IFIAAS"
Compatible RouterOS v6 et v7.
Synchronisation des profils hotspot
Le système récupère automatiquement vos profils hotspot MikroTik existants. Il ne les crée pas — vous restez maître de votre hotspot.
Ce qui est synchronisé
| Champ MikroTik | Affiché comme |
|---|---|
| name | Nom du profil |
| rate-limit (2M/2M) | Vitesse : 2 Mbps |
| session-timeout (1h) | Durée : 1 heure |
| shared-users | Appareils autorisés |
| data-limit | Quota données |
Après synchronisation, personnalisez le nom affiché, le prix et l'apparence depuis la section Offres WiFi du dashboard.
Configuration FedaPay
FedaPay permet d'accepter MTN Mobile Money, Moov Money, Orange Money et carte bancaire.
- Créer un compte sur fedapay.com
- Récupérer vos clés dans Paramètres → API
- Dans votre dashboard IFIAAS → Paiements → FedaPay
- Entrer votre clé publique (
pk_live_...) et secrète (sk_live_...) - Configurer l'URL webhook dans FedaPay :
https://wifi.ifiaas.com/api/webhook/fedapay
Configuration FeexPay
FeexPay prend en charge MTN, Moov, Orange Money et Wave dans plusieurs pays d'Afrique de l'Ouest.
- Créer un compte sur feexpay.me
- Récupérer votre token API et Shop ID
- Dans votre dashboard → Paiements → FeexPay
- Configurer l'URL webhook :
https://wifi.ifiaas.com/api/webhook/feexpay
Workflow paiement complet
Client ouvre /pay/votre-slug
Client filtre et sélectionne une offre WiFi
Client choisit FedaPay ou FeexPay, paie en Mobile Money
Webhook reçu → transaction marquée PAID
Commande create_voucher envoyée au MikroTik
MikroTik crée l'utilisateur hotspot, renvoie username/password
PDF ticket généré (PDFKit) avec 3 QR codes
Ticket téléchargé automatiquement sur l'appareil client
Tentative connexion automatique hotspot (PAP login)
Fallback : instructions connexion manuelle si échec
Référence API — Auth
/api/auth/generate-linkGénère un nouveau magic link et session utilisateur. Aucun paramètre requis.
// Réponse
{ "success": true, "data": {
"dashboardUrl": "https://wifi.ifiaas.com/dashboard/abc123",
"sessionToken": "a1b2c3...",
"expiresAt": "2025-02-20T10:00:00Z"
}}
/api/auth/verifyVérifie un token de session. Header : Authorization: Bearer <token>
/api/auth/regenerateRégénère un nouveau token (invalide l'ancien). Auth requise.
/api/auth/backup-txtTélécharge le fichier TXT de sauvegarde. Auth requise.
Référence API — MikroTik
/api/mikrotik/checkPoint d'entrée polling. Header : X-Router-Token: <token>
// Body (envoyé par MikroTik)
{ "identity": "Router1", "cpu_load": 5, "results": [] }
// Réponse
{ "ok": true, "commands": [
{ "id": "uuid", "type": "create_voucher",
"username": "abc123", "password": "xyz789",
"profile": "1H-200F", "timeout": "1h" }
]}
/api/mikrotik/sync-profilesReçoit la liste des profils hotspot et les synchronise en DB.
/api/mikrotik/voucher-resultMikroTik confirme la création d'un voucher. Déclenche la génération PDF.
Référence API — Paiement
/api/public/offers/:slugRetourne les offres actives d'un lien de paiement public.
/api/pay/initiateInitie un paiement Mobile Money.
{ "payment_link_slug": "abc123",
"offer_id": "uuid",
"provider": "fedapay",
"customer_phone": "97000000" }
/api/pay/status/:transactionIdVérifie le statut d'une transaction (polling côté client).
/api/ticket/:voucherId/pdfTélécharge le ticket PDF d'un voucher.
/api/ticket/:voucherId/qr?type=connectionQR code d'un voucher. Types : connection ou ticket
/api/ticket/payment-qr/:linkIdQR code du lien de paiement (3ème QR).
Référence API — Analytics
Toutes les routes requièrent une authentification (Authorization: Bearer <token> ou ?slug=...).
/api/analytics/overview?period=monthKPIs : revenus, ventes, panier moyen, taux de conversion + comparaison période précédente.
/api/analytics/chart?period=weekDonnées graphique ventes/revenus par label temporel.
/api/analytics/top-offersTop 5 offres les plus vendues avec pourcentage.
/api/analytics/hotspotStats hotspot : routeur online/offline, vouchers actifs.
/api/analytics/summaryRésumé global : aujourd'hui, semaine, mois, all time.
Sécurité
| Mécanisme | Description |
|---|---|
| Tokens session | 64 chars aléatoires (crypto.randomBytes) |
| Chiffrement clés API | AES-256-GCM avec IV aléatoire |
| Rate limiting | Express-rate-limit par IP et par token |
| Validation webhook | HMAC-SHA256 (timing-safe comparison) |
| Headers sécurité | Helmet (HSTS, CSP, X-Frame-Options...) |
| Idempotency webhooks | Table webhook_events avec event_id unique |
| XSS protection | Sanitisation inputs (xss library) |
| Logs sécurité | Table security_logs en DB |
FAQ
Mon MikroTik est derrière NAT/CGNAT, ça fonctionne ?
Oui. Le MikroTik initie la connexion sortante vers votre serveur. Aucun port entrant n'est nécessaire sur le routeur.
Combien de temps dure un magic link ?
30 jours par défaut (configurable via MAGIC_LINK_EXPIRY_HOURS). Régénérez-le depuis le dashboard avant expiration.
Puis-je utiliser plusieurs providers de paiement ?
Oui, FedaPay et FeexPay peuvent être configurés simultanément. Le client choisit à l'achat.
Le système fonctionne si le MikroTik est offline ?
Non. Si le routeur est offline (détecté après 30 secondes sans heartbeat), la page de paiement affiche une erreur et bloque les nouvelles transactions.
Comment récupérer mon dashboard si j'ai perdu mon lien ?
Utilisez le bouton "Se connecter" sur la page d'accueil et collez votre token depuis le fichier TXT de sauvegarde.
Où sont stockés les tickets PDF ?
Dans le dossier /generated/tickets/ sur votre VPS. Accessibles via /generated/tickets/ticket_uuid.pdf.