Hoppa till huvudinnehåll

Introduktion

Kör serverlösa funktioner och bakgrundsjobb automatiskt när betalningshändelser inträffar. Bearbeta betalningar, skicka meddelanden, uppdatera databaser och kör komplexa arbetsflöden med Inngests pålitliga plattform för funktionskörning.
Denna integration kräver din Inngest webhook-URL från din funktionskonfiguration.

Komma igång

1

Öppna Webhook-sektionen

I din Dodo Payments-instrumentpanel, navigera till Webhooks → + Lägg till slutpunkt och expandera integrationsrullgardinsmenyn.
Lägg till slutpunkt och integrationsrullgardinsmeny
2

Välj Inngest

Välj Inngest integrationskortet.
3

Skapa Inngest-funktion

I Inngest, skapa en ny funktion och kopiera webhook-URL:en från funktionskonfigurationen.
4

Klistra in Webhook-URL

Klistra in Inngest webhook-URL:en i slutpunktens konfiguration.
5

Konfigurera Transformation

Redigera transformationskoden för att formatera händelser för din Inngest-funktion.
6

Testa & Skapa

Testa med exempelpayloads och klicka på Skapa för att aktivera integrationen.
7

Klart!

🎉 Betalningshändelser kommer nu automatiskt att utlösa dina Inngest-funktioner.

Exempel på transformationskod

Grundläggande händelsepayload

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;
}

Prenumerationshändelsehanterare

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;
}

Tvist-händelsehanterare

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;
}

Vanliga användningsfall för Inngest

  • Skicka bekräftelsemail
  • Uppdatera kundregister
  • Bearbeta återbetalningar
  • Generera fakturor
  • Uppdatera lager
  • Välkomna nya prenumeranter
  • Bearbeta avbokningar
  • Skicka påminnelser om förnyelse
  • Uppdatera faktureringscykler
  • Hantera misslyckade betalningar
  • Uppdatera intäktsmått
  • Spåra kundbeteende
  • Generera rapporter
  • Synkronisera data till analysplattformar
  • Beräkna churn-rate

Tips

  • Använd beskrivande händelsenamn för bättre funktionsorganisation
  • Inkludera användarkontext för funktionskörning
  • Sätt korrekta tidsstämplar för händelseordning
  • Strukturera data konsekvent över händelser
  • Använd Inngests funktioner för omförsök och felhantering

Felsökning

  • Verifiera att webhook-URL:en är korrekt och aktiv
  • Kontrollera att Inngest-funktionen är distribuerad och aktiv
  • Se till att händelsenamn matchar funktionsutlösare
  • Granska Inngest-funktionsloggar för fel
  • Kontrollera att payload-strukturen matchar Inngests förväntningar
  • Verifiera att händelsenamn är korrekt formaterade
  • Se till att alla obligatoriska fält är inkluderade
  • Testa med Inngests webhook-testverktyg