Skip to main content
Adaptern @dodopayments/express ger din Express-app tre routehanterare: checkoutHandler returnerar checkout-URL:er, CustomerPortal skickar en kund till Customer Portal och Webhooks verifierar webhook-anrop och anropar dina eventhanterare.

Checkout Handler

Skapa betalningslänkar och checkout-sessioner från din Express-app.

Customer Portal

Låt kunder hantera sina prenumerationer och uppgifter.

Webhooks

Verifiera och bearbeta webhook-händelser från Dodo Payments.

Installation

1

Install the Package

Kör följande kommando i projektets rotkatalog:
2

Set Up Environment Variables

Skapa filen .env i projektets rotkatalog:
Skapa API-nyckeln under Developer → API Keys. Lägg till din webhook-endpoint under Developer → Webhooks och kopiera dess signeringshemlighet till DODO_PAYMENTS_WEBHOOK_KEY. Använd en API-nyckel för testläge under utvecklingen tillsammans med DODO_PAYMENTS_ENVIRONMENT=test_mode, eftersom en nyckel för testläge endast fungerar mot testläge. DODO_PAYMENTS_RETURN_URL är valfri.
Lägg aldrig till filen .env eller hemligheter i versionshanteringen.

Exempel på routehanterare

Exemplen registrerar routes i en Express-app som skapats med express(). POST-hanterarna för checkout och webhook-hanteraren läser req.body, så varje exempel registrerar express.json() före sina routes.
Använd denna hanterare för att integrera checkout från Dodo Payments i din Express-app. Den stöder statiska (GET), dynamiska (POST) och sessionbaserade (POST) betalningsflöden. Registrera varje POST-flöde på en egen sökväg, eftersom den första hanteraren som registreras för en sökväg besvarar alla anrop till den.

Checkout-routehanterare

Adaptern stöder alla tre checkout-flöden i Dodo Payments. Ange type i hanterarens konfiguration för att välja vilket flöde en route ska tillhandahålla. Varje flöde svarar med JSON som innehåller en checkout_url som kunden kan öppna.
  • Statiska betalningslänkar: type: "static", GET. Skapar en betalningslänk för en produkt från query-parametrar efter att ha kontrollerat att produkten finns.
  • Dynamiska betalningslänkar: type: "dynamic", POST. Skapar en engångsbetalning eller prenumeration med en betalningslänk, beroende på om produkten är återkommande.
  • Checkout-sessioner: type: "session", POST. Skapar en checkout-session från en produktvarukorg och kunduppgifter. Använd detta flöde för nya integrationer.
checkoutHandler tar följande alternativ: Registrera hanteraren för GET när type är static, och för POST när type är dynamic eller session. Hanteraren returnerar 405 för andra metoder.

Parametrar som stöds i query

string
obligatorisk
Produktidentifierare, till exempel ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
standard:"1"
Produktens kvantitet.
string
Kundens fullständiga namn. Ignoreras om firstName eller lastName anges.
string
Kundens förnamn.
string
Kundens efternamn.
string
Kundens e-postadress.
string
Kundens land som en ISO 3166-1 alpha-2-kod.
string
Kundens gatuadress.
string
Kundens ort.
string
Kundens delstat eller provins.
string
Kundens postnummer eller ZIP-kod.
boolean
Ange true för att inaktivera fältet för fullständigt namn.
boolean
Ange true för att inaktivera förnamnsfältet.
boolean
Ange true för att inaktivera efternamnsfältet.
boolean
Ange true för att inaktivera e-postfältet.
boolean
Ange true för att inaktivera landsfältet.
boolean
Ange true för att inaktivera adressfältet.
boolean
Ange true för att inaktivera ortsfältet.
boolean
Ange true för att inaktivera delstatsfältet.
boolean
Ange true för att inaktivera ZIP-kodfältet.
string
Betalningsvalutan, till exempel USD.
boolean
standard:"true"
Visa eller dölj valutaväljaren.
number
Fastställer det debiterade beloppet i större valutaenheter, till exempel 12.5 för $12.50. Fungerar endast med produkter av typen Pay What You Want och ignoreras om beloppet understiger produktens minimipris.
boolean
standard:"true"
Visa eller dölj rabattsektionen.
string
Alla query-parametrar som börjar med metadata_ skickas till checkout som metadata, till exempel metadata_orderId=123.
En inaktiveringsflagga börjar gälla endast när den är true och det matchande fältet har ett värde, till exempel email med disableEmail. Hanteraren skickar dessa parametrar till en statisk betalningslänk.
Om productId saknas returnerar hanteraren ett 400-svar. Ogiltiga query-parametrar eller en produkt som inte finns på ditt konto resulterar också i ett 400-svar.

Svarsformat

Statisk checkout returnerar ett JSON-svar med checkout-URL:en:
  • Skicka parametrar som en JSON-body i en POST-begäran.
  • Stöder både engångsbetalningar och återkommande betalningar. Hanteraren hämtar produkten och skapar sedan en prenumeration om produkten är återkommande, annars en engångsbetalning.
  • Bodyn behöver billing (med street, city, state, country och zipcode) och customer, samt product_id (med en valfri quantity) eller product_cart. Prenumerationer behöver product_id.
  • Hanteraren vidarebefordrar även metadata, allowed_payment_method_types, billing_currency, discount_codes (eller den föråldrade discount_code), return_url, show_saved_payment_methods och tax_id. För prenumerationer vidarebefordras även addons, on_demand och trial_period_days. Övriga fält ignoreras.
  • Se följande för information om fälten:
Dynamic Checkout anropar de föråldrade endpointsen POST /payments och POST /subscriptions. Använd Checkout Sessions för nya integrationer.

Svarsformat

Dynamisk checkout returnerar ett JSON-svar med betalningslänken som checkout-URL:
Skicka en checkout-session-payload som JSON-body. Hanteraren skapar en checkout-session som hanterar hela betalningsflödet för engångsköp och prenumerationer och returnerar dess checkout_url. product_cart krävs och måste innehålla minst en produkt.Varje checkout_url fungerar en gång och upphör efter 24 timmar, eller efter 15 minuter när du skickar confirm: true. En session som skapats med payment_method_id returnerar ingen checkout_url, så hanteraren svarar med 400.Se Checkout Sessions Integration Guide för mer information och en fullständig lista över fält som stöds.

Svarsformat

Checkout-sessioner returnerar ett JSON-svar med checkout-URL:en:

Routehanterare för Customer Portal

Routehanteraren för Customer Portal skapar en Customer Portal-session för kunden i customer_id och omdirigerar begäran till portallänken. CustomerPortal tar alternativen bearerToken och environment, på samma sätt som checkoutHandler. Om Dodo Payments inte kan skapa sessionen returnerar hanteraren 500.

Query-parametrar

string
obligatorisk
Kund-ID:t för portalsessionen, till exempel ?customer_id=cus_123.
boolean
Om värdet är true skickas ett e-postmeddelande till kunden med portallänken.
Returnerar 400 om customer_id saknas. Hanteraren autentiserar inte begäran och öppnar portalen för alla customer_id som tas emot. Skydda därför routen med din egen autentisering och skicka endast den inloggade användarens kund-ID.

Webhook-routehanterare

Webhook-hanteraren verifierar varje begäran med din webhook-hemlighet, som skickas som webhookKey, och anropar sedan dina eventhanterare.
Registrera express.json() före webhook-routen. Hanteraren verifierar signaturen mot req.body och avvisar därför alla begäranden om bodyn inte är tolkad JSON. Använd inte express.raw() för denna route.
  • Metod: Endast POST-begäranden stöds. Andra metoder returnerar 405.
  • Signaturverifiering: Verifierar headerna webhook-id, webhook-timestamp och webhook-signature med webhookKey enligt specifikationen Standard Webhooks. Returnerar 401 om verifieringen misslyckas.
  • Payload-validering: Valideras med Zod. Returnerar 400 för ogiltiga payloads.
  • Felhantering:
    • 401: Ogiltig signatur
    • 400: Ogiltig payload
    • 500: Internt fel under verifieringen
  • Eventdirigering: Anropar onPayload för varje event, därefter hanteraren för eventets typ, och returnerar 200 när de är klara. Hanteraren fångar inte fel som dina eventhanterare kastar.

Webhook-eventhanterare som stöds

Alla hanterare är valfria och asynkrona. Se Webhook Event Guide för payloaden för varje event.

Prompt för LLM

Senast ändrad 26 september 2026