Förutsättningar
Innan du börjar behöver du:- Ett handlarkonto hos Dodo Payments
- En API-nyckel från Developer → API Keys i kontrollpanelen, lagrad i
DODO_PAYMENTS_API_KEY - En webhook-hemlighet från Developer → Webhooks, lagrad i
DODO_PAYMENTS_WEBHOOK_KEY - Minst en prenumerationsprodukt skapad under Products
API-integrering
Checkout-sessioner
Skapa en prenumeration genom att bygga en checkout-session med din prenumerationsprodukt. Kunden godkänner en betalningsmetod och prenumerationen aktiveras när kunden slutför checkouten.- Node.js SDK
- Python SDK
- REST API
API-svar
Svaret innehåller encheckout_url:
Webhooks
Webhooks meddelar din server när prenumerationshändelser inträffar. Konfigurera din endpoint under Developer → Webhooks i kontrollpanelen. Information om hur du konfigurerar din webhook-endpoint finns i Webhooks.Typer av prenumerationshändelser
Spåra dessa händelser för att hantera prenumerationens livscykel:subscription.active— Prenumerationen aktiverassubscription.updated— Ett fält i prenumerationen ändrassubscription.on_hold— En förnyelse- eller planändringsdebitering misslyckassubscription.failed— Det gick inte att skapa prenumerationen (slutgiltigt; kunden måste prenumerera igen)subscription.renewed— En återkommande debitering lyckassubscription.past_due— En förnyelse misslyckades och respitperioden började; kunden behåller åtkomsten tillpast_due_ends_atsubscription.plan_changed— Planen uppgraderades, nedgraderades eller ändradessubscription.cancelled— Prenumerationen avslutadessubscription.expired— Prenumerationen nådde slutet av sin löptid
paused, unpaused och update_payment_method.
Betalningsscenarier
Flöde för lyckad betalning Webhook-sekvensen beror på om prenumerationen har en provperiod. Omedelbar debitering (0 provdagar):subscription.active: medgivandet godkänns och prenumerationen aktiveras.payment.succeeded: bekräftar den första debiteringen. Förvänta dig denna inom 2–10 minuter efter checkout.
- Vid provperiodens start (checkout):
subscription.activeutlöses när betalningsmetoden har godkänts. Ingen återkommande debitering görs ännu. Den första riktiga debiteringen skjuts upp tills provperioden är slut. - Vid provperiodens slut: det återkommande beloppet debiteras och du får
payment.succeededtillsammans medsubscription.renewed.
subscription.renewed: utlöses vid varje debiteringscykel när förnyelsebetalningen dras, alltid tillsammans medpayment.succeeded. Den innehåller även den uppdateradenext_billing_date.
När pengar faktiskt dras för en prenumerationsprodukt får du
subscription.renewed och payment.succeeded. Använd subscription.renewed (i stället för enbart payment.succeeded) som signal för att förlänga åtkomsten till nästa cykel.- Prenumerationsfel
subscription.failed- Det gick inte att skapa prenumerationen eftersom ett medgivande inte kunde skapas.payment.failed- Anger en misslyckad betalning.
- Prenumerationen pausad
subscription.on_hold- Prenumerationen pausas på grund av en misslyckad förnyelsebetalning eller misslyckad planändringsdebitering. Om ditt företag har en respitperiod flyttas en misslyckad förnyelse först tillpast_due(subscription.past_due), och flyttas tillon_hold(ellercancelled, beroende på inställningarna för respitperioden) först när respitperioden löper ut. Se Prenumerationstillstånd.- När en prenumeration pausas förnyas den inte automatiskt förrän betalningsmetoden har uppdaterats.
Bästa praxis: För att förenkla implementeringen rekommenderar vi att du främst spårar prenumerationshändelser för att hantera prenumerationens livscykel.
subscription.failed jämfört med subscription.on_hold
Dessa två händelser är lätta att blanda ihop, men kräver helt olika hantering:
Hantera pausad prenumeration
När en prenumeration går till tillståndeton_hold måste du uppdatera betalningsmetoden för att återaktivera den. Detta avsnitt förklarar när prenumerationer pausas och hur du hanterar dem.
När prenumerationer pausas
En prenumeration pausas när:- Förnyelsebetalningen misslyckas: Den automatiska förnyelsedebiteringen misslyckas på grund av otillräckliga medel, utgånget kort eller avslag från banken
- Planändringsdebiteringen misslyckas: En omedelbar debitering vid upp- eller nedgradering av planen misslyckas
- Godkännande av betalningsmetoden misslyckas: Betalningsmetoden kan inte godkännas för återkommande debiteringar
Återaktivera pausade prenumerationer
Om du vill återaktivera en prenumeration från tillståndeton_hold använder du API:et Update Payment Method. Detta gör automatiskt följande:
- Skapar en debitering för återstående skuld
- Genererar en faktura för debiteringen
- Behandlar betalningen med den nya betalningsmetoden
- Återaktiverar prenumerationen till tillståndet
activenär betalningen lyckas
1
Handle subscription.on_hold webhook
När du får en webhook för
subscription.on_hold uppdaterar du applikationens tillstånd och meddelar kunden:2
Update payment method
När kunden är redo att uppdatera sin betalningsmetod anropar du API:et Update Payment Method:
Du kan även använda ett befintligt ID för betalningsmetoden om kunden har sparade betalningsmetoder:
3
Monitor webhook events
När betalningsmetoden har uppdaterats övervakar du följande webhook-händelser:
payment.succeeded- Debiteringen för återstående skuld lyckadessubscription.active- Prenumerationen har återaktiverats
Exempel på nyttolast för prenumerationshändelse
Ändra prenumerationsplaner
Du kan uppgradera eller nedgradera en prenumerationsplan med API-endpointen för planändring. Detta låter dig ändra prenumerationens produkt och antal samt hantera proportionell debitering.Change Plan API Reference
Detaljerad information om hur du ändrar prenumerationsplaner finns i vår API-dokumentation för Change Plan.
Alternativ för proportionell debitering
När du ändrar prenumerationsplaner har du fyra alternativ för hur den omedelbara debiteringen ska hanteras:1. prorated_immediately
- Krediterar den oanvända delen av den aktuella debiteringscykeln, proportionellt efter återstående tid. Krediten omfattar basplanen, antalet och eventuella tillägg
- Debiterar sedan en hel cykel enligt den nya planen, antalet och tilläggen. Själva debiteringen är aldrig proportionell
- Omedelbar nettodebitering = (full ny cykel) minus (återstående andel x full gammal cykel). Om krediten är större behålls mellanskillnaden som prenumerationsspecifik kredit för framtida förnyelser
- Under en provperiod byter detta omedelbart användaren till den nya planen och debiterar kunden direkt
2. full_immediately
- Debiterar kunden hela prenumerationsbeloppet för den nya planen utan kredit för den föregående cykeln
- Vid både uppgradering och nedgradering betalar kunden hela priset för den nya planen från början
- Användbart när du vill debitera hela beloppet oavsett hur mycket tid som återstod av den gamla planen
3. difference_immediately
- Kunden betalar endast skillnaden mellan priset för den gamla och den nya planen
- Beloppet beror inte på när under cykeln ändringen görs. Samma uppgradering kostar lika mycket dag 1 som dag 29
- Vid uppgradering debiteras kunden omedelbart mellanskillnaden. Exempel: $30/månad → $80/månad = $50 debiteras direkt
- Vid nedgradering sparas prisskillnaden som prenumerationsspecifik kredit och används automatiskt för framtida förnyelser. Exempel: $50/månad → $20/månad = $30 sparas som kredit
4. do_not_bill
- Tillämpa planändringen omedelbart utan att debitera något vid ändringstillfället. Den nya planen, antalet och tilläggen kan användas direkt
- Eftersom inget debiteras nu får kunden vid en uppgradering den dyrare planen gratis under återstoden av den aktuella cykeln. En nedgradering träder i kraft omedelbart utan kredit för den oanvända delen av cykeln som kunden redan har betalat för
- Tillägg som beviljas via
do_not_billkrediteras inte vid en senare planändring, eftersom de aldrig debiterades. En efterföljande ändring debiterar hela den nya tilläggsmängden - Den uppdaterade planen (samt antal/tillägg) debiteras vid nästa planerade förnyelse, och det ursprungliga debiteringsdatumet bevaras
Beteende
- När du anropar detta API initierar Dodo Payments omedelbart en debitering baserat på det valda alternativet för proportionell debitering
- Med
prorated_immediatelyberäknas en kredit för den oanvända delen av den aktuella cykeln vid varje ändring, både uppgradering och nedgradering. Om krediten överstiger debiteringen för den nya cykeln läggs resten till prenumerationens kreditbalans. Dessa krediter är specifika för prenumerationen och används endast för att kvitta framtida återkommande betalningar för samma prenumeration - Med
difference_immediatelyär nettot alltid den exakta prisskillnaden. Vid nedgraderingar sparas överskottet som prenumerationsspecifik kredit, på samma sätt som medprorated_immediately - Alternativet
full_immediatelykringgår kreditberäkningar och debiterar hela beloppet för den nya planen - Alternativet
do_not_billtillämpar ändringen omedelbart men skjuter upp debiteringen till nästa förnyelsedatum, som bevaras
Debiteringshantering
- Den omedelbara debitering som initieras vid planändringen slutförs vanligtvis på mindre än 2 minuter
- Om denna omedelbara debitering misslyckas av någon anledning pausas prenumerationen automatiskt tills problemet har lösts
On-demand-prenumerationer
On-demand-prenumerationer låter dig debitera kunder flexibelt, inte bara enligt ett fast schema. Funktionen är tillgänglig för alla konton.
subscription_data.on_demand i request body. Detta låter dig godkänna en betalningsmetod utan en omedelbar debitering eller ange ett anpassat startpris.
Så debiterar du en on-demand-prenumeration:
För efterföljande debiteringar använder du endpointen POST /subscriptions//charge och anger det belopp som ska debiteras kunden för transaktionen.
En komplett steg-för-steg-guide (inklusive exempel på request/response, säkra retry-policyer och webhook-hantering) finns i Guiden för on-demand-prenumerationer.
Viktigt att känna till om prenumerationsdebitering
Provperioder använder ett $0-godkännande, inte en debitering. När en prenumeration har en provperiod skapar provperiodens början ett $0-medgivandegodkännande för att spara kortet; den första riktiga debiteringen sker när provperioden slutar. I betalningslistan visas exakt en betalning med
total_amount på 0 för en prenumeration med kostnadsfri provperiod. En betald provperiod debiterar i stället dess trial_amount i förväg.Prenumerationens livscykel:
past_due = en förnyelse misslyckades och respitperioden pågår (kunden behåller åtkomsten). on_hold = en förnyelse misslyckades (kan återställas: be kunden uppdatera sin betalningsmetod; dunning-försök tillämpas). expired = löptiden tog slut utan förnyelse och kan inte återaktiveras. Kunden måste prenumerera igen. cancelled = avslutad av kunden eller handlaren. De flesta förnyelsefel är avslag från kortutgivaren (otillräckliga medel, kortet avvisades), inte ett Dodo-fel.Relaterad API-referens
Create Subscription (Deprecated)
Äldre API för att skapa en prenumeration direkt. Använd Checkout-sessioner för nya integreringar
Change Subscription Plan
API-referens för att uppgradera, nedgradera eller ändra prenumerationsplaner med alternativ för proportionell debitering
Update Payment Method
API-referens för att uppdatera betalningsmetoder och återaktivera pausade prenumerationer
Patch Subscription
API-referens för att uppdatera prenumerationsuppgifter och konfiguration