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 l’URL du webhook Inngest provenant de la configuration de votre fonction.

Prise en main

1

Open the Webhook Section

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

Select Inngest

Choisissez la carte d’intégration Inngest.
3

Create Inngest Function

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

Paste Webhook URL

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

Configure Transformation

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

Test & Create

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

Done!

🎉 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 indicateurs de revenus
  • Suivre le comportement des clients
  • Générer des rapports
  • Synchroniser les données avec les plateformes d’analyse
  • Calculer les taux d’attrition

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 des événements correspondent aux déclencheurs de la fonction
  • Consultez les journaux de la fonction Inngest pour détecter les erreurs
  • Vérifiez que la structure de la charge utile correspond aux attentes d’Inngest
  • Vérifiez que les noms des é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