Documentation

← Retour à l'accueil
IFIAAS WiFi Platform
Plateforme gratuite de vente WiFi MikroTik

Plateforme 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

ComposantTechnologie
BackendNode.js 20 + Express.js
Base de donnéesPostgreSQL 15
FrontendHTML + TailwindCSS + Vanilla JS
PDFPDFKit
QR Codesnode-qrcode
Serveur webNginx (reverse proxy)
Process managerPM2
PaiementsFedaPay + 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

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ètreValeur
Fréquence5 secondes
Timeout8 secondes
Retry max3 tentatives
Détection offline30 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 MikroTikAffiché comme
nameNom du profil
rate-limit (2M/2M)Vitesse : 2 Mbps
session-timeout (1h)Durée : 1 heure
shared-usersAppareils autorisés
data-limitQuota 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.

  1. Créer un compte sur fedapay.com
  2. Récupérer vos clés dans Paramètres → API
  3. Dans votre dashboard IFIAAS → Paiements → FedaPay
  4. Entrer votre clé publique (pk_live_...) et secrète (sk_live_...)
  5. 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.

  1. Créer un compte sur feexpay.me
  2. Récupérer votre token API et Shop ID
  3. Dans votre dashboard → Paiements → FeexPay
  4. Configurer l'URL webhook :
    https://wifi.ifiaas.com/api/webhook/feexpay

Workflow paiement complet

1

Client ouvre /pay/votre-slug

2

Client filtre et sélectionne une offre WiFi

3

Client choisit FedaPay ou FeexPay, paie en Mobile Money

4

Webhook reçu → transaction marquée PAID

5

Commande create_voucher envoyée au MikroTik

6

MikroTik crée l'utilisateur hotspot, renvoie username/password

7

PDF ticket généré (PDFKit) avec 3 QR codes

8

Ticket téléchargé automatiquement sur l'appareil client

9

Tentative connexion automatique hotspot (PAP login)

10

Fallback : instructions connexion manuelle si échec

Référence API — Auth

POST/api/auth/generate-link

Gé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"
}}
GET/api/auth/verify

Vérifie un token de session. Header : Authorization: Bearer <token>

POST/api/auth/regenerate

Régénère un nouveau token (invalide l'ancien). Auth requise.

GET/api/auth/backup-txt

Télécharge le fichier TXT de sauvegarde. Auth requise.

Référence API — MikroTik

POST/api/mikrotik/check

Point 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" }
]}
POST/api/mikrotik/sync-profiles

Reçoit la liste des profils hotspot et les synchronise en DB.

POST/api/mikrotik/voucher-result

MikroTik confirme la création d'un voucher. Déclenche la génération PDF.

Référence API — Paiement

GET/api/public/offers/:slug

Retourne les offres actives d'un lien de paiement public.

POST/api/pay/initiate

Initie un paiement Mobile Money.

{ "payment_link_slug": "abc123",
  "offer_id": "uuid",
  "provider": "fedapay",
  "customer_phone": "97000000" }
GET/api/pay/status/:transactionId

Vérifie le statut d'une transaction (polling côté client).

GET/api/ticket/:voucherId/pdf

Télécharge le ticket PDF d'un voucher.

GET/api/ticket/:voucherId/qr?type=connection

QR code d'un voucher. Types : connection ou ticket

GET/api/ticket/payment-qr/:linkId

QR 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=...).

GET/api/analytics/overview?period=month

KPIs : revenus, ventes, panier moyen, taux de conversion + comparaison période précédente.

GET/api/analytics/chart?period=week

Données graphique ventes/revenus par label temporel.

GET/api/analytics/top-offers

Top 5 offres les plus vendues avec pourcentage.

GET/api/analytics/hotspot

Stats hotspot : routeur online/offline, vouchers actifs.

GET/api/analytics/summary

Résumé global : aujourd'hui, semaine, mois, all time.

Sécurité

MécanismeDescription
Tokens session64 chars aléatoires (crypto.randomBytes)
Chiffrement clés APIAES-256-GCM avec IV aléatoire
Rate limitingExpress-rate-limit par IP et par token
Validation webhookHMAC-SHA256 (timing-safe comparison)
Headers sécuritéHelmet (HSTS, CSP, X-Frame-Options...)
Idempotency webhooksTable webhook_events avec event_id unique
XSS protectionSanitisation 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.