Passer au contenu principal

Introduction

Exécutez automatiquement des fonctions sans serveur et des tâches en arrière-plan lorsque des événements de paiement se produisent. Traitez les paiements, envoyez des notifications, mettez à jour des bases de données et exécutez des workflows complexes avec la plateforme d’exécution de fonctions fiable d’Inngest.
Cette intégration nécessite votre URL de webhook Inngest provenant de la configuration de votre fonction.

Prise en main

1

Ouvrir la section Webhook

Dans votre tableau de bord Dodo Payments, accédez à Webhooks → + Ajouter un point de terminaison et développez le menu déroulant des intégrations.
Ajouter un point de terminaison et menu déroulant des intégrations
2

Sélectionner Inngest

Choisissez la carte d’intégration Inngest.
3

Créer une fonction Inngest

Dans Inngest, créez une nouvelle fonction et copiez l’URL du webhook à partir de la configuration de la fonction.
4

Coller l'URL du Webhook

Collez l’URL du webhook Inngest dans la configuration du point de terminaison.
5

Configurer la transformation

Modifiez le code de transformation pour formater les événements pour votre fonction Inngest.
6

Tester & Créer

Testez avec des charges utiles d’exemple et cliquez sur Créer pour activer l’intégration.
7

Terminé !

🎉 Les événements de paiement déclencheront désormais automatiquement vos fonctions Inngest.

Exemples de code de transformation

Charge utile d’événement de base

basic_event.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        customer_email: p.customer.email,
        customer_name: p.customer.name,
        payment_method: p.payment_method || "unknown"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Gestionnaire d’événements d’abonnement

subscription_event.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          customer_name: s.customer.name,
          product_id: s.product_id,
          amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
          frequency: s.payment_frequency_interval,
          next_billing: s.next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          cancelled_at: s.cancelled_at,
          cancel_at_next_billing: s.cancel_at_next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}

Gestionnaire d’événements de litige

dispute_event.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        dispute_id: d.dispute_id,
        payment_id: d.payment_id,
        amount: (d.amount / 100).toFixed(2),
        status: d.dispute_status,
        stage: d.dispute_stage,
        remarks: d.remarks || "",
        urgent: webhook.eventType === "dispute.opened"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Cas d’utilisation courants d’Inngest

  • Envoyer des e-mails de confirmation
  • Mettre à jour les dossiers clients
  • Traiter les remboursements
  • Générer des factures
  • Mettre à jour l’inventaire
  • Accueillir les nouveaux abonnés
  • Traiter les annulations
  • Envoyer des rappels de renouvellement
  • Mettre à jour les cycles de facturation
  • Gérer les paiements échoués
  • Mettre à jour les métriques de revenus
  • Suivre le comportement des clients
  • Générer des rapports
  • Synchroniser les données avec des plateformes d’analyse
  • Calculer les taux de désabonnement

Conseils

  • Utilisez des noms d’événements descriptifs pour une meilleure organisation des fonctions
  • Incluez le contexte utilisateur pour l’exécution des fonctions
  • Définissez des horodatages appropriés pour l’ordre des événements
  • Structurez les données de manière cohérente à travers les événements
  • Utilisez les fonctionnalités de réessai et de gestion des erreurs d’Inngest

Dépannage

  • Vérifiez que l’URL du webhook est correcte et active
  • Assurez-vous que la fonction Inngest est déployée et active
  • Vérifiez que les noms d’événements correspondent aux déclencheurs de fonction
  • Consultez les journaux de fonction Inngest pour les erreurs
  • Vérifiez que la structure de la charge utile correspond aux attentes d’Inngest
  • Vérifiez que les noms d’événements sont correctement formatés
  • Assurez-vous que tous les champs requis sont inclus
  • Testez avec l’outil de test de webhook d’Inngest