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

Open the Webhook Section

I din Dodo Payments-instrumentpanel, navigera till Webhooks → + Lägg till slutpunkt och expandera rullgardinsmenyn för integrationer.
Add Endpoint and integrations dropdown
2

Select Inngest

Välj Inngest integrationskort.
3

Create Inngest Function

Skapa en ny funktion i Inngest och kopiera webhook-URL:en från funktionskonfigurationen.
4

Paste Webhook URL

Klistra in Inngest webhook-URL:en i slutpunktkonfigurationen.
5

Configure Transformation

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

Test & Create

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

Done!

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

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
  • Behandla återbetalningar
  • Generera fakturor
  • Uppdatera lager
  • Välkomna nya prenumeranter
  • Hantera avbokningar
  • Skicka påminnelser om förnyelse
  • Uppdatera faktureringscykler
  • Hantera misslyckade betalningar
  • Uppdatera intäktsmetrik
  • Spåra kundbeteende
  • Generera rapporter
  • Synka 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

  • Kontrollera att webhook-URL:en är korrekt och aktiv
  • Kontrollera att Inngest-funktionen är distribuerad och aktiv
  • Säkerställ 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
  • Säkerställ att alla obligatoriska fält är inkluderade
  • Testa med Inngests verktyg för webhooks-testning