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-billingdoit encaisser un paiement (ex. renouvellement d'abonnement), il passe par DYNORS PAIEMENT viaInterAppCallService→ 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