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 dashboarden. Se Webhooks för information om hur du konfigurerar din webhook-endpoint.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 ändradessubscription.on_hold— En debitering för förnyelse eller planändring misslyckadessubscription.failed— Det gick inte att skapa prenumerationen (slutgiltigt; kunden måste prenumerera igen)subscription.renewed— En återkommande debitering lyckadessubscription.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, se Subscription Webhooks.
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 faktureringscykel när förnyelsebetalningen dras, alltid tillsammans medpayment.succeeded. Den innehåller även det 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.
- Prenumeration pausad
subscription.on_hold- Prenumerationen pausas på grund av en misslyckad förnyelsebetalning eller en misslyckad debitering för planändring. 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 Subscription States.- 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 förväxla, men de kräver mycket olika hantering:
Hantera pausade prenumerationer
När en prenumeration övergå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, ett utgånget kort eller avslag från banken
- Debiteringen för planändring misslyckas: En omedelbar debitering vid uppgradering eller nedgradering av planen misslyckas
- Godkännande av betalningsmetoden misslyckas: Betalningsmetoden kan inte godkännas för återkommande debiteringar
Återaktivera pausade prenumerationer
För att återaktivera en prenumeration från tillståndeton_hold använder du API:t Update Payment Method. Detta gör automatiskt följande:
- Skapar en debitering för återstående skuld
- Skapar 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
subscription.on_hold-webhook uppdaterar du applikationens tillstånd och meddelar kunden:2
Update payment method
När kunden är redo att uppdatera sin betalningsmetod anropar du API:t Update Payment Method:
Du kan också använda ett befintligt ID för betalningsmetoden om kunden har sparade betalningsmetoder:
3
Monitor webhook events
Efter att 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 gör att du kan ändra prenumerationens produkt, kvantitet och hantera proportionell debitering.Change Plan API Reference
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 faktureringscykeln, proportionellt efter återstående tid. Krediten täcker basplanen, kvantiteten och eventuella tillägg
- Debiterar sedan en hel cykel enligt den nya planen, kvantiteten och tilläggen. Själva debiteringen proportioneras aldrig
- Netto omedelbar debitering = (hel ny cykel) minus (återstående andel × hel gammal cykel). Om krediten är större hålls mellanskillnaden som prenumerationsspecifik kredit för framtida förnyelser
- Under en provperiod växlar 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 på 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 skillnaden. Exempel: $30/månad → $80/månad = $50 debiteras direkt
- Vid nedgradering sparas prisskillnaden som prenumerationsspecifik kredit och används automatiskt vid 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, kvantiteten och tilläggen kan användas direkt
- Eftersom inget debiteras nu får kunden vid en uppgradering den högre planen utan kostnad under resten av den aktuella cykeln. En nedgradering träder i kraft omedelbart utan kredit för den oanvända delen av cykeln som redan har betalats
- Tillägg som beviljats genom
do_not_billkrediteras inte vid en senare planändring, eftersom de aldrig fakturerades. En efterföljande ändring fakturerar den nya mängden tillägg i sin helhet - Den uppdaterade planen (och kvantiteten/tilläggen) faktureras vid nästa schemalagda förnyelse, och det ursprungliga faktureringsdatumet 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 återstoden till prenumerationens kreditsaldo. Dessa krediter gäller endast den prenumerationen och används bara för att kvitta framtida återkommande betalningar för samma prenumeration - Med
difference_immediatelyär nettot alltid exakt 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 faktureringen till nästa förnyelsedatum, som bevaras
Debiteringshantering
- Den omedelbara debitering som initieras när planen ändras slutförs vanligtvis på mindre än 2 minuter
- Om den omedelbara debiteringen misslyckas av någon anledning pausas prenumerationen automatiskt tills problemet är löst
On-Demand-prenumerationer
On-Demand-prenumerationer gör att du kan debitera kunder flexibelt, inte bara enligt ett fast schema. Den här funktionen är tillgänglig för alla konton.
subscription_data.on_demand i request body. Detta gör att du kan 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.
För en komplett steg-för-steg-guide (inklusive exempel på request/response, säkra retry-policyer och webhook-hantering), se On-Demand Subscriptions Guide.
Viktigt att känna till om prenumerationsfakturering
Provperioder gör en auktorisering på $0, inte en debitering. När en prenumeration har en provperiod skapar provperiodens start en mandatauktorisering på $0 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örskott.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 på utfärdarens sida (otillräckliga medel, avvisat kort), inte ett Dodo-fel.