Fondamentaux

Concepts de Base

Architecture du proxy, isolation multi-tenant et gestion des environnements.

Architecture & Concepts

Architecture du Proxy

Quand votre app appelle ash-gate, voici ce qui se passe en coulisses :

1. Votre app Flutter envoie une requête
   POST /fedapay/transactions
   Header: X-Feda-Project-Key: pk_sandbox_xxx

2. FedapayTenantMiddleware s'exécute
   → Résout pk_sandbox_xxx vers le projet "mon-app"
   → Déchiffre la clé secrète réelle (AES-256)
   → Injecte req.apiKey, req.projectId, req.tenantId

3. ProxyAccessGuard vérifie les droits
   → Public Key : accès limité aux routes @ProxySafe()
   → Secret Key : accès complet

4. Le controller transmet à l'API FedaPay
   avec les clés réelles, de façon transparente

5. La réponse revient à votre app
   sans jamais exposer la vraie clé secrète.

Isolation Multi-tenant

Chaque projet dans ash-gate est totalement isolé :

DonnéeIsolation
Clés d'APIChiffrées par projet (AES-256)
TransactionsTaguées avec ash_project_id dans les métadonnées
Plans & abonnementsLiés à un tenantId et un projectId
Quotas & meteringComptés par projet
WebhooksRoutés par ash_project_id

Pourquoi ash_project_id dans les métadonnées ?

Chaque transaction créée via le proxy inclut automatiquement :

{
  "metadata": {
    "ash_project_id": "64f3a1b2c3d4e5f6a7b8c9d0"
  }
}

Cela permet au webhook handler de savoir exactement quel projet ash-gate doit traiter l'événement, même si tous les projets partagent la même URL de webhook côté FedaPay.


Environnements

ash-gate supporte les deux modes FedaPay. Basculez avec le header X-Feda-Env :

# Mode sandbox (développement)
curl -H "X-Feda-Project-Key: pk_sandbox_xxx" \
     -H "X-Feda-Env: sandbox" \
     https://app.ashgateway.com/fedapay/transactions

# Mode live (production)
curl -H "X-Feda-Project-Key: pk_live_xxx" \
     -H "X-Feda-Env: live" \
     https://app.ashgateway.com/fedapay/transactions

!IMPORTANT Créez deux projets distincts ash-gate — un pour le sandbox, un pour la production. Cela évite tout mélange de clés et permet un monitoring séparé.


Public Key vs Secret Key

OpérationClé Publique (Public Key)Clé Secrète (Secret Key)
Intégration mobileOuiNon
Création de transactionOuiOui
Listing des transactionsNonOui
Création de plan SaaSNonOui
Souscription à un planOuiOui
Annulation d'abonnementNonOui
Gestion des clientsNonOui

Suivant : Intégration Flutter ->