Hoppa till huvudinnehåll

Förutsättningar

För att integrera Dodo Payments API behöver du:
  • Ett Dodo Payments handelskonto
  • API-uppgifter (API-nyckel och webhook hemlig nyckel) från instrumentpanelen
För en mer detaljerad guide om förutsättningarna, kolla in den här sektionen.

API-integration

Utcheckningssessioner

Använd utcheckningssessioner för att sälja prenumerationsprodukter med en säker, hostad utcheckning. Skicka din prenumerationsprodukt i product_cart och omdirigera kunder till den returnerade checkout_url.
Blandad utcheckning: Du kan kombinera prenumerationsprodukter med engångsprodukter i samma utcheckningssession. Detta möjliggör användningsfall som installationsavgifter med prenumerationer, hårdvarubundlar med SaaS och mer. Se guiden för utcheckningssessioner för exempel.
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

async function main() {
  const session = await client.checkoutSessions.create({
    product_cart: [
      { product_id: 'prod_subscription_monthly', quantity: 1 }
    ],
    // Optional: configure trials for subscription products
    subscription_data: { trial_period_days: 14 },
    customer: {
      email: '[email protected]',
      name: 'Jane Doe',
    },
    return_url: 'https://example.com/success',
  });

  console.log(session.checkout_url);
}

main();

API-svar

Följande är ett exempel på svaret:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
Omdirigera kunden till checkout_url.

Webhooks

När du integrerar prenumerationer kommer du att få webhooks för att spåra prenumerationslivscykeln. Dessa webhooks hjälper dig att hantera prenumerationsstatusar och betalningsscenarier effektivt. För att ställa in din webhook-slutpunkt, följ vår Detaljerade integrationsguide.

Prenumerationseventtyper

Följande webhook-händelser spårar ändringar i prenumerationsstatus:
  1. subscription.active - Prenumerationen har aktiverats framgångsrikt.
  2. subscription.updated - Prenumerationsobjektet har uppdaterats (utlöses vid ändring av något fält).
  3. subscription.on_hold - Prenumerationen sätts på paus på grund av misslyckad förnyelse.
  4. subscription.failed - Skapandet av prenumerationen misslyckades under skapandet av mandatet.
  5. subscription.renewed - Prenumerationen förnyas för nästa faktureringsperiod.
För pålitlig hantering av prenumerationslivscykeln rekommenderar vi att spåra dessa prenumerationsevent.
Använd subscription.updated för att få realtidsnotifikationer om eventuella ändringar i prenumerationen, så att din applikationsstatus hålls synkroniserad utan att behöva pollera API:et.

Betalningsscenarier

Framgångsrik betalningsflöde När en betalning lyckas kommer du att få följande webhooks:
  1. subscription.active - Indikerar aktivering av prenumerationen
  2. payment.succeeded - Bekräftar den första betalningen:
    • För omedelbar fakturering (0 provdagar): Förvänta dig inom 2-10 minuter
    • För provdagar: när det slutar
  3. subscription.renewed - Indikerar betalningsavdrag och förnyelse för nästa cykel. (I grund och botten, när betalning dras för prenumerationsprodukter, får du subscription.renewed webhook tillsammans med payment.succeeded)
Betalningsfelsscenarier
  1. Prenumerationsfel
  • subscription.failed - Skapandet av prenumerationen misslyckades på grund av misslyckande att skapa ett mandat.
  • payment.failed - Indikerar misslyckad betalning.
  1. Prenumeration på paus
  • subscription.on_hold - Prenumerationen sätts på paus på grund av misslyckad förnyelsebetalning eller misslyckad avgift vid planändring.
  • När en prenumeration sätts på paus kommer den inte att förnyas automatiskt förrän betalningsmetoden uppdateras.
Bästa praxis: För att förenkla implementeringen rekommenderar vi att främst spåra prenumerationsevent för att hantera prenumerationslivscykeln.

Hantera prenumeration på paus

När en prenumeration går in i on_hold tillstånd, behöver du uppdatera betalningsmetoden för att återaktivera den. Denna sektion förklarar när prenumerationer sätts på paus och hur man hanterar dem.

När prenumerationer sätts på paus

En prenumeration sätts på paus när:
  • Förnyelsebetalning misslyckas: Den automatiska förnyelseavgiften misslyckas på grund av otillräckliga medel, utgången kort eller bankavslag
  • Avgift vid planändring misslyckas: En omedelbar avgift under planuppgradering/nedgradering misslyckas
  • Behörighet för betalningsmetod misslyckas: Betalningsmetoden kan inte auktoriseras för återkommande avgifter
Prenumerationer i on_hold tillstånd kommer inte att förnyas automatiskt. Du måste uppdatera betalningsmetoden för att återaktivera prenumerationen.

Återaktivera prenumerationer från paus

För att återaktivera en prenumeration från on_hold tillstånd, använd API:et för att uppdatera betalningsmetoden. Detta gör automatiskt:
  1. Skapar en avgift för utestående belopp
  2. Genererar en faktura för avgiften
  3. Behandlar betalningen med den nya betalningsmetoden
  4. Återaktiverar prenumerationen till active tillstånd efter lyckad betalning
1

Hantera subscription.on_hold webhook

När du får en subscription.on_hold webhook, uppdatera din applikationsstatus och meddela kunden:
// Webhook handler
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;
  
  if (event.type === 'subscription.on_hold') {
    const subscription = event.data;
    
    // Update subscription status in your database
    await updateSubscriptionStatus(subscription.subscription_id, 'on_hold');
    
    // Notify customer to update payment method
    await sendEmailToCustomer(subscription.customer_id, {
      subject: 'Payment Required - Subscription On Hold',
      message: 'Your subscription is on hold. Please update your payment method to continue service.'
    });
  }
  
  res.json({ received: true });
});
2

Uppdatera betalningsmetod

När kunden är redo att uppdatera sin betalningsmetod, anropa API:et för att uppdatera betalningsmetoden:
// Update with new payment method
const response = await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'new',
  return_url: 'https://example.com/return'
});

// For on_hold subscriptions, a charge is automatically created
if (response.payment_id) {
  console.log('Charge created for remaining dues:', response.payment_id);
  // Redirect customer to response.payment_link to complete payment
}
Du kan också använda en befintlig betalningsmetod-ID om kunden har sparade betalningsmetoder:
await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'existing',
  payment_method_id: 'pm_abc123'
});
3

Övervaka webhook-händelser

Efter att ha uppdaterat betalningsmetoden, övervaka dessa webhook-händelser:
  1. payment.succeeded - Avgiften för utestående belopp var framgångsrik
  2. subscription.active - Prenumerationen har återaktiverats
if (event.type === 'payment.succeeded') {
  const payment = event.data;
  
  // Check if this payment is for an on_hold subscription
  if (payment.subscription_id) {
    // Wait for subscription.active webhook to confirm reactivation
  }
}

if (event.type === 'subscription.active') {
  const subscription = event.data;
  
  // Update subscription status in your database
  await updateSubscriptionStatus(subscription.subscription_id, 'active');
  
  // Restore customer access
  await restoreCustomerAccess(subscription.customer_id);
  
  // Notify customer of successful reactivation
  await sendEmailToCustomer(subscription.customer_id, {
    subject: 'Subscription Reactivated',
    message: 'Your subscription has been reactivated successfully.'
  });
}

Exempel på prenumerationseventpayload


EgenskapTypObligatoriskBeskrivning
business_idstringJaDen unika identifieraren för företaget
timestampstringJaTidsstämpeln för när händelsen inträffade (inte nödvändigtvis samma som när den levererades)
typestringJaTypen av händelse. Se Händelsetyper
dataobjectJaHuvuddatapayloaden. Se Dataobjekt

Ändra prenumerationsplaner

Du kan uppgradera eller nedgradera en prenumerationsplan med hjälp av API-slutpunkten för att ändra plan. Detta gör att du kan modifiera prenumerationens produkt, kvantitet och hantera proration.

API-referens för att ändra plan

För detaljerad information om att ändra prenumerationsplaner, vänligen se vår dokumentation för API:et för att ändra plan.

Prorationsalternativ

När du ändrar prenumerationsplaner har du två alternativ för att hantera den omedelbara avgiften:

1. prorated_immediately

  • Beräknar det proraterade beloppet baserat på den återstående tiden i den aktuella faktureringscykeln
  • Tar ut avgift från kunden endast för skillnaden mellan den gamla och den nya planen
  • Under en provperiod kommer detta omedelbart att växla användaren till den nya planen och ta ut avgift från kunden direkt

2. full_immediately

  • Tar ut avgift från kunden för hela prenumerationsbeloppet för den nya planen
  • Ignorerar eventuell återstående tid eller krediter från den tidigare planen
  • Användbart när du vill återställa faktureringscykeln eller ta ut hela beloppet oavsett proration

3. difference_immediately

  • Vid uppgradering debiteras kunden omedelbart skillnaden mellan de två planbeloppen.
  • Till exempel, om den nuvarande planen är 30 Dollar och kunden uppgraderar till 80 Dollar, debiteras de $50 direkt.
  • Vid nedgradering läggs det oanvända beloppet från den nuvarande planen som intern kredit och tillämpas automatiskt på framtida prenumerationsförnyelser.
  • Till exempel, om den nuvarande planen är 50 Dollar och kunden byter till en 20 Dollar-plan, krediteras de återstående $30 och används för nästa faktureringscykel.

Beteende

  • När du anropar detta API initierar Dodo Payments omedelbart en avgift baserat på ditt valda prorationsalternativ
  • Om planändringen är en nedgradering och du använder prorated_immediately, kommer krediter automatiskt att beräknas och läggas till prenumerationens kreditbalans. Dessa krediter är specifika för den prenumerationen och kommer endast att användas för att kompensera framtida återkommande betalningar av samma prenumeration
  • Alternativet full_immediately kringgår kreditberäkningar och debiterar hela beloppet för den nya planen
Välj ditt prorationsalternativ noggrant: Använd prorated_immediately för rättvis fakturering som tar hänsyn till oanvänd tid, eller full_immediately när du vill ta ut hela beloppet för den nya planen oavsett den aktuella faktureringscykeln.

Avgiftsbehandling

  • Den omedelbara avgiften som initieras vid planändring slutförs vanligtvis inom mindre än 2 minuter
  • Om denna omedelbara avgift misslyckas av någon anledning, sätts prenumerationen automatiskt på paus tills problemet är löst

On-Demand Prenumerationer

On-demand prenumerationer låter dig ta betalt av kunder flexibelt, inte bara på ett fast schema. Kontakta support för att aktivera denna funktion.
För att skapa en on-demand prenumeration: För att skapa en on-demand prenumeration, använd POST /subscriptions API-slutpunkten och inkludera on_demand fältet i din begäran. Detta gör att du kan auktorisera en betalningsmetod utan en omedelbar avgift, eller ställa in ett anpassat initialpris. För att ta betalt för en on-demand prenumeration: För efterföljande avgifter, använd POST /subscriptions/charge slutpunkten och specificera beloppet som ska debiteras kunden för den transaktionen.
För en komplett, steg-för-steg-guide—inklusive exempel på begäran/svar, säkra återföringspolicyer och webhook-hantering—se Guiden för on-demand prenumerationer.