Skip to main content
Adaptern @dodopayments/fastify ger din Fastify-app tre route handlers: Checkout returnerar checkout-URL:er, CustomerPortal skickar en kund till Customer Portal och Webhooks verifierar webhook requests och anropar dina event handlers.

Checkout Handler

Skapa payment links och checkout sessions från din Fastify-app.

Customer Portal

Låt kunder hantera sina prenumerationer och uppgifter.

Webhooks

Verifiera och bearbeta webhook events från Dodo Payments.

Installation

1

Install the Package

Kör följande kommando i projektets rotkatalog:
Paketet kräver Fastify 5.4.0 eller senare.
2

Set Up Environment Variables

Skapa en .env-fil i projektets rotkatalog:
Skapa API key under Developer → API Keys. Lägg till din webhook endpoint under Developer → Webhooks och kopiera dess signing secret till DODO_PAYMENTS_WEBHOOK_KEY. Använd en API key i test mode medan du bygger, med DODO_PAYMENTS_ENVIRONMENT=test_mode, eftersom en key i test mode bara fungerar mot test mode. DODO_PAYMENTS_RETURN_URL är valfri.
Lägg aldrig till din .env-fil eller secrets i versionshanteringen.

Exempel på route handlers

Exemplen registrerar routes på en Fastify-instans som skapats med Fastify(). Webhook-routen behöver request body i råformat, så exemplet lägger till en string body parser i ett plugin som endast innehåller webhook-routen.
Använd denna handler för att integrera Dodo Payments checkout i din Fastify-app. Stöder statiska (GET), dynamiska (POST) och sessionbaserade (POST) payment flows. Checkout() returnerar en getHandler för det statiska flödet och en postHandler för de dynamiska och sessionbaserade flödena. Registrera varje POST-flöde på sin egen path.

Checkout route handler

Adaptern stöder alla tre checkout flows från Dodo Payments. Ange type i handler-konfigurationen för att välja vilket flöde en route ska hantera. Varje flöde svarar med JSON som innehåller en checkout_url som kunden kan öppna.
  • Statiska payment links: type: "static", GET. Skapar en payment link för en produkt från query parameters efter att ha kontrollerat att produkten finns.
  • Dynamiska payment links: type: "dynamic", POST. Skapar en engångsbetalning eller en prenumeration med en payment link, beroende på om produkten är återkommande.
  • Checkout sessions: type: "session", POST. Skapar en checkout session från en produktvarukorg och kunduppgifter. Använd detta flöde för nya integrationer.
Checkout tar emot följande options: Checkout returnerar ett objekt med två handlers. Registrera getHandler för GET när type är static, och postHandler för POST när type är dynamic eller session.

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 stad.
string
Kundens delstat eller provins.
string
Kundens postnummer eller ZIP code.
boolean
Sätt till true för att inaktivera fältet för fullständigt namn.
boolean
Sätt till true för att inaktivera förnamnsfältet.
boolean
Sätt till true för att inaktivera efternamnsfältet.
boolean
Sätt till true för att inaktivera e-postfältet.
boolean
Sätt till true för att inaktivera landsfältet.
boolean
Sätt till true för att inaktivera fältet för adressrad.
boolean
Sätt till true för att inaktivera stadsfältet.
boolean
Sätt till true för att inaktivera delstatsfältet.
boolean
Sätt till true för att inaktivera ZIP code-fä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 Pay What You Want-produkter och ignoreras om beloppet understiger produktens minimipris.
boolean
standard:"true"
Visa eller dölj rabattsektionen.
string
Alla query parameters som börjar med metadata_ skickas till checkout som metadata, till exempel metadata_orderId=123.
En disable-flagga börjar gälla endast när den är true och det matchande fältet har ett värde, till exempel email med disableEmail. Handlern skickar dessa parametrar till en statisk payment link.
Om productId saknas returnerar handlern ett 400-svar. Ogiltiga query parameters 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 request.
  • Stöder både engångsbetalningar och återkommande betalningar. Handlern hämtar produkten och skapar sedan en prenumeration om produkten är återkommande, annars en engångsbetalning.
  • Body 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.
  • Handlern vidarebefordrar också 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 endpoints POST /payments och POST /subscriptions. Använd Checkout Sessions för nya integrationer.

Svarsformat

Dynamic checkout returnerar ett JSON-svar med payment link som checkout-URL:
Skicka en checkout session payload som JSON body. Handlern 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 kan användas en gång och upphör att gälla 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å handlern 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 sessions returnerar ett JSON-svar med checkout-URL:en:

Customer Portal route handler

Customer Portal route handler skapar en Customer Portal-session för kunden i customer_id och omdirigerar requesten till portal-länken. CustomerPortal tar emot options bearerToken och environment, på samma sätt som Checkout. Om Dodo Payments inte kan skapa sessionen returnerar handlern 500.

Query parameters

string
obligatorisk
Kundens ID för portal-sessionen, till exempel ?customer_id=cus_123.
boolean
Om den anges som true skickas ett e-postmeddelande till kunden med portal-länken.
Returnerar 400 om customer_id saknas. Handlern autentiserar inte requesten och öppnar portalen för alla customer_id som tas emot. Placera därför routen bakom din egen authentication och skicka endast den inloggade användarens customer ID.

Webhook route handler

Webhook-handlern verifierar varje request med din webhook secret, som skickas som webhookKey, och anropar sedan dina event handlers.
Webhook-handlern behöver request body i råformat som en string, så lägg till en content type parser för application/json med parseAs: 'string'. Fastify tillämpar en parser på varje route inom det scope där den läggs till. Lägg till den i ett plugin som endast registrerar webhook-routen, precis som i exemplet. På root-instansen skulle den även skicka en string till POST checkout-handlers, som då returnerar 400.
  • Method: Endast POST requests stöds. Andra methods returnerar 405.
  • Signature Verification: Verifierar headers webhook-id, webhook-timestamp och webhook-signature med webhookKey enligt specifikationen Standard Webhooks. Returnerar 401 om verifieringen misslyckas.
  • Payload Validation: Valideras med Zod. Returnerar 400 för ogiltiga payloads.
  • Error Handling:
    • 401: Ogiltig signature
    • 400: Ogiltig payload
    • 500: Internt fel under verifieringen
  • Event Routing: Anropar onPayload för varje event, sedan handlern för eventets type, och returnerar 200 när de är klara. Handlern fångar inte fel som dina event handlers kastar.

Webhook event handlers som stöds

Varje handler är valfri och async. Se Webhook Event Guide för payloaden för varje event.

Prompt för LLM

Senast ändrad 26 september 2026