Aller au contenu

dynors-billing — Module Abonnements SaaS

Extension DYNORS — Gestion du cycle de vie des abonnements SaaS (essai gratuit, plans, mandats SEPA) pour tout projet DYNORS.
⚠️ Ce module ne gère pas l'encaissement PSP (Wave, Orange Money, etc.) — cette responsabilité appartient à DYNORS PAIEMENT.


🎯 Objectif

dynors-billing est le module optionnel qui gère le cycle de vie des abonnements pour les applications DYNORS (DAWALALE, ELISA, produits SaaS, etc.). Il est entièrement désactivable : en mode DISABLED, aucun impact sur l'application.

Distinction fondamentale avec DYNORS PAIEMENT

Composant Rôle Nature
dynors-billing Gère les plans d'abonnement SaaS (FREE_TRIAL / SUBSCRIPTION), le statut d'accès, les mandats SEPA Module extension (dynors-extensions)
DYNORS PAIEMENT Orchestre les PSP (Wave, OM, PayTech…), initie et suit les transactions, gère les callbacks PSP Application autonome (dynors-projects) — accès via SLY /paiement/**

Règle : quand dynors-billing doit encaisser un paiement (ex. renouvellement d'abonnement), il passe par DYNORS PAIEMENT via InterAppCallService → SLY → /paiement/**. Il ne contacte jamais un SDK PSP directement.

Points clés

  • 3 modes : DISABLED, FREE_TRIAL, SUBSCRIPTION
  • Cycle de vie : statuts TRIALING, TRIAL_EXPIRED, ACTIVE, GRACE, SUSPENDED, CANCELLED
  • Mandat SEPA : enregistrement IBAN, prélèvement récurrent avec texte légal
  • Multi-tenant : un abonnement par tenant
  • Intégration : SDK (lib dans l'app) ou service dédié ; configurable via TAKKU

📋 Informations générales

Propriété Valeur
Nom dynors-billing
Type Extension (dynors-extensions)
Domaine Abonnements SaaS, accès / restriction
Repository dynors-extensions/packages/extensions/billing
Status ✅ Implémenté

🏗️ Modes de facturation

Mode Comportement
DISABLED Billing désactivé ; toutes les requêtes passent. Aucune table ni config requise.
FREE_TRIAL Essai gratuit avec durée configurable ; après expiration → 402.
SUBSCRIPTION Abonnement actif requis ; statuts ACTIVE/GRACE → accès, SUSPENDED/CANCELLED → 402.

Statuts d'abonnement : TRIALING, TRIAL_EXPIRED, ACTIVE, GRACE, SUSPENDED, CANCELLED.


🔌 Intégration

  • SDK : dépendance Maven/Gradle dans l'application hôte ; filtre BillingGuardFilter, contrôleurs REST, services.
  • Service dédié : déploiement séparé possible ; l'app hôte appelle l'API billing.
  • TAKKU : peut configurer le mode, les plans, le PSP et les options SEPA par projet.

💳 Encaissement (via DYNORS PAIEMENT)

Pour initier un paiement lors d'un renouvellement ou d'une activation d'abonnement, dynors-billing délègue à DYNORS PAIEMENT :

// Dans billing — service d'abonnement
public void renewSubscription(String tenantCode, String provider, long amount) {
    PaiementInitRequest req = new PaiementInitRequest(
        provider, amount, "XOF",
        tenant.getContactPhone(),
        "Renouvellement abonnement — " + LocalDate.now(),
        slyBaseUrl + "/" + appCode + "/callbacks/paiement",
        Map.of("tenantCode", tenantCode)
    );
    paiementClient.initiate(tenantCode, req);   // → SLY → /paiement/api/v1/payments/initiate
}

Voir DYNORS PAIEMENT pour les détails d'intégration PSP.


📚 Documentation

  • Guide d'intégration : core/GUIDE_INTEGRATION_DYNORS_BILLING.md
  • SEPA & mandats : core/GUIDE_BILLING_SEPA_ET_SUPERGEST.md
  • Architecture : core/ARCHITECTURE.md (section extensions)
  • Hub PSP : dynors-paiement.md

Dernière mise à jour : 2026-04-30