Aller au contenu

Applications et intégration de paiement

Utilisez einvoice comme backend de facturation pour vos propres SaaS. Créez une application, définissez des plans tarifaires, intégrez le widget de paiement et recevez des webhooks signés lors de chaque transaction.

La fonctionnalité Applications vous permet de :

  • Créer des applications représentant vos SaaS tiers
  • Définir des plans tarifaires (abonnements récurrents ou paiements uniques)
  • Générer des clés API pour sécuriser les appels serveur-à-serveur
  • Configurer des webhooks pour être notifié de chaque paiement
  • Intégrer le paywall SDK einvoice directement dans vos pages web
  • Surveiller les livraisons échouées de webhooks pour le débogage

Une application (ou « app ») est la représentation d’un de vos SaaS dans einvoice. Lorsqu’un de vos clients paie via le paywall, einvoice :

  1. Crée la session de paiement sous le nom de votre application
  2. Encaisse le paiement via votre passerelle de paiement (Berexia)
  3. Émet une facture à votre client (B2C ou B2B)
  4. Envoie un webhook signé à votre URL pour que vous provisiez l’accès
  1. Allez dans Entreprise → Paramètres → Applications
  2. Cliquez sur “Créer une application”
  3. Remplissez le formulaire :
    • Nom : nom affiché de votre SaaS (ex. : « Mon Application »)
    • Slug : identifiant court unique (ex. : mon-app) — utilisé dans les préfixes de clés API
    • URL Webhook : URL de votre serveur pour recevoir les notifications de paiement
    • URL de succès : page vers laquelle rediriger après un paiement réussi (optionnel)
    • URL d’annulation : page de retour en cas d’abandon (optionnel)
  4. Cliquez sur “Créer”

Important — Copiez le secret webhook immédiatement. Après la création, le secret webhook est affiché une seule fois. Copiez-le et stockez-le en lieu sûr (variable d’environnement). Il ne sera plus accessible ensuite.

Les clés API sécurisent la communication entre votre serveur et l’API einvoice. Il en existe deux types :

  • Préfixe : ek_{slug}_
  • Portée limitée à une seule application
  • Utilisée côté serveur pour créer des sessions de paiement
  • Recommandée pour l’intégration d’une application spécifique
  • Préfixe : ck_{slug}_
  • Accès complet à toutes les données de votre compte
  • Utilisée pour les intégrations globales (ex. : outils de gestion internes)
  • À utiliser avec précaution — accès plus large
  • Une clé API est affichée une seule fois à la création — copiez-la immédiatement
  • Ne jamais inclure une clé API dans le code frontend ou dans le SDK côté client
  • Stockez les clés dans des variables d’environnement côté serveur
  • Faites tourner vos clés régulièrement (rotation)
  1. Dans la liste des applications, cliquez sur “Voir les clés” de l’application concernée
  2. Cliquez sur “Créer une clé”
  3. Donnez un nom descriptif à la clé (ex. : « Production », « Serveur Node.js »)
  4. Cliquez sur “Créer”
  5. Copiez immédiatement la clé affichée — elle ne sera plus visible après fermeture

La rotation génère une nouvelle clé et laisse l’ancienne active pendant 24 heures (période de grâce), le temps de déployer la nouvelle.

  1. Sur la ligne de la clé concernée, cliquez sur “Faire tourner”
  2. Confirmez l’opération
  3. Récupérez la nouvelle clé dans la boîte d’affichage
  4. Mettez à jour votre variable d’environnement
  5. L’ancienne clé s’invalidera automatiquement après 24 heures

La révocation est immédiate et irréversible. Toute requête utilisant cette clé sera refusée.

  1. Sur la ligne de la clé concernée, cliquez sur “Révoquer”
  2. Confirmez dans la boîte de dialogue
  3. La clé est désactivée instantanément

Utilisez la rotation (et non la révocation) si vous souhaitez remplacer une clé sans interruption de service.

Le secret webhook est utilisé pour vérifier l’authenticité des notifications envoyées par einvoice à votre serveur. Il est généré automatiquement lors de la création de l’application.

Si votre secret est compromis, régénérez-le :

  1. Dans la vue d’une application, cliquez sur “Régénérer le secret”
  2. Confirmez l’opération
  3. Copiez immédiatement le nouveau secret affiché
  4. Mettez à jour votre variable d’environnement

Toute régénération invalide immédiatement l’ancien secret. Les webhooks non vérifiables seront rejetés par votre serveur.

Votre serveur doit vérifier la signature de chaque webhook pour rejeter les requêtes frauduleuses.

En-têtes envoyés par einvoice :

  • X-Einvoice-Event : nom de l’événement (subscription.activated, payment.succeeded, subscription.renewed)
  • X-Einvoice-Signature : signature HMAC-SHA256 du corps de la requête

Exemple de vérification (Node.js) :

const sig = req.headers['x-einvoice-signature'];
const expected = crypto.createHmac('sha256', process.env.EINVOICE_WEBHOOK_SECRET)
.update(JSON.stringify(req.body)).digest('hex');
if (sig !== expected) return res.status(401).send('Signature invalide');

En bas de la page Applications, la section “Livraisons échouées” liste les webhooks qui n’ont pas pu être livrés après 5 tentatives (délais : immédiat → 1 min → 5 min → 30 min → 2 h).

Pour chaque livraison échouée, vous verrez :

  • L’événement concerné
  • Le numéro de la tentative
  • La date d’occurrence
  • La référence externe associée (votre identifiant utilisateur)

Vérifiez que votre URL webhook est accessible publiquement et renvoie un code HTTP 200 pour chaque événement.

Pour afficher les plans de votre application sur votre site, ajoutez le script einvoice :

Affichage simple des plans :

<script src="https://app.einvoice.ma/paywall.js"
data-app="VOTRE_APP_ID" data-target="#pricing">
</script>

Paiement avec session serveur : Votre serveur crée d’abord une session de paiement via l’API, puis passe l’identifiant au SDK :

<script src="https://app.einvoice.ma/paywall.js"></script>
<script>
const paywall = new EinvoicePaywall({ app: 'VOTRE_APP_ID' });
paywall.checkout(sessionId, '#pricing');
paywall.on('success', (data) => {
// data.subscription_id, data.plan_slug, data.external_ref
window.location.href = '/bienvenue';
});
</script>

La clé API ne doit jamais être incluse dans le code frontend. L’identité de l’acheteur est définie exclusivement côté serveur lors de la création de la session.

Partagez ces ressources avec l’équipe technique qui intégrera einvoice :

  • Nommez les clés par environnement : « Production », « Staging », « CI » pour une rotation facile
  • Tournez les clés régulièrement (tous les 90 jours recommandés)
  • Testez les webhooks avec un outil comme Webhook.site avant la mise en production
  • Surveillez les livraisons échouées après chaque déploiement de votre serveur
  • Répondez rapidement (HTTP 200) aux webhooks — einvoice attend une réponse en moins de 10 secondes
  • Vérifiez que vous envoyez l’en-tête X-API-Key: ek_... dans la requête
  • Confirmez que la clé est active (pas révoquée) dans la liste des clés
  • La clé en rotation peut encore fonctionner pendant 24 heures — vérifiez la date d’expiration
  • Vérifiez que l’URL webhook est accessible depuis internet (pas localhost)
  • Assurez-vous que votre serveur renvoie HTTP 200 — tout autre code déclenche une relance
  • Consultez la section “Livraisons échouées” pour identifier l’erreur
  • Vérifiez que vous utilisez le corps brut de la requête (pas l’objet parsé)
  • En Node.js : utilisez express.raw() ou express.json() avant le middleware de signature
  • Si le secret a changé (régénéré), mettez à jour votre variable d’environnement
  • Vérifiez que data-app correspond bien à l’identifiant de votre application
  • L’endpoint /rpc/get_app_plans est public, aucune clé API n’est nécessaire côté client
  • Vérifiez la console du navigateur pour les erreurs CORS ou réseau

Besoin d’aide ? Contactez notre support technique.