Skip to main content
Paketet @dodopayments/tanstack ger ditt TanStack Start-projekt tre request handlers. Checkout returnerar checkout-URL:er, CustomerPortal skickar en kund till Customer Portal och Webhooks verifierar webhook-händelser och dirigerar dem till din kod. Varje handler tar emot en standardiserad Request och returnerar en Response, så du anropar den från en server route handler.

Checkout Handler

Skapa checkout-URL:er med statiska, dynamiska och checkout session-flöden.

Customer Portal

Låt kunder hantera sina prenumerationer och uppgifter.

Webhooks

Ta emot och bearbeta Dodo Payments webhook-händelser.

Installation

1

Install the Package

Kör det här kommandot i projektets rotkatalog:
Paketet behöver också zod 3.25 eller senare, vilket anges som ett peer dependency.
2

Set Up Environment Variables

Skapa en .env-fil i projektets rotkatalog. Skapa API-nyckeln under Developer → API Keys. Lägg till din webhook-endpoint under Developer → Webhooks och kopiera dess Signing secret till DODO_PAYMENTS_WEBHOOK_KEY:
TanStack Start läser in .env-filer, och server routes läser värdena från process.env. DODO_PAYMENTS_RETURN_URL är den plats kunder hamnar på efter checkout. Om du inte anger en miljö använder handlers live_mode. En API-nyckel för testläge fungerar endast med test_mode.
Checka aldrig in din .env-fil eller hemligheter i versionshantering.

Exempel på Route Handlers

Exemplen är TanStack Start server routes i src/routes/api/. Varje exempel definierar sina handlers under server.handlers i createFileRoute. Äldre versioner av TanStack Start, till exempel 1.129, definierar server routes med createServerFileRoute från @tanstack/react-start/server och i stället ett anrop till .methods(). Dodo Payments handlers fungerar på samma sätt med båda API:erna: skicka dem request.
Använd den här handlern för att lägga till Dodo Payments checkout i din app. Handlern GET hanterar statisk checkout. Handlern POST hanterar checkout sessions eller dynamisk checkout när du anger type: "dynamic". Exemplet med dynamisk checkout förutsätter att du anger type: "dynamic".

Checkout Route Handler

Checkout-handlern stöder alla tre sätt att ta betalt med Dodo Payments:
  • Statiska Payment Links: Delbara URL:er som samlar in betalningar utan kod.
  • Dynamiska Payment Links: Payment links som du skapar med anpassade uppgifter. De använder föråldrade endpoints.
  • Checkout Sessions: Hosted checkout med en produktvarukorg, kunduppgifter och anpassningsalternativ. Detta är det rekommenderade flödet.
Checkout tar emot dessa alternativ: Handlern hanterar statisk checkout för requests till GET. För requests till POST skapar den en dynamisk payment link när type är dynamic, och annars en checkout session.

Query Parameters som stöds

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 ZIP- eller postnummer.
boolean
Ange true för att inaktivera fältet för fullständigt namn.
boolean
Ange true för att inaktivera fältet för förnamn.
boolean
Ange true för att inaktivera fältet för efternamn.
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 fältet för adressrad.
boolean
Ange true för att inaktivera stadsfältet.
boolean
Ange true för att inaktivera delstatsfältet.
boolean
Ange true för att inaktivera ZIP-kodfältet.
string
Betalningsvaluta, till exempel USD.
boolean
standard:"true"
Visa eller dölj valutaväljaren.
number
Låser 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 det matchande fältet har ett värde, till exempel email med disableEmail=true. Handlern lägger till returnUrl från sin konfiguration i länken som redirect_url.
Om productId saknas returnerar handlern ett 400-svar. Ogiltiga query parameters eller en produkt som inte finns i ditt konto returnerar också 400.

Svarsformat

Statisk checkout returnerar ett JSON-svar med checkout-URL:en. I testläge använder URL:en test.checkout.dodopayments.com:
  • Skicka parametrarna 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.
  • Bodyn behöver billing (med street, city, state, country och zipcode) och customer, samt product_id eller product_cart. Prenumerationer behöver product_id.
  • Se följande för alla body-fält som stöds:
Dynamisk checkout fungerar som proxy för de föråldrade endpoints POST /payments och POST /subscriptions. Den fortsätter att fungera för befintliga integrationer, men nya integrationer bör använda checkout sessions.

Svarsformat

Dynamisk checkout returnerar ett JSON-svar med payment link som checkout-URL:
Checkout sessions skapar en hosted checkout för engångsköp och prenumerationer, med full kontroll över anpassningen. product_cart är det enda obligatoriska fältet och behöver minst en produkt. Om bodyn inte innehåller return_url använder handlern returnUrl från sin konfiguration.Varje checkout_url fungerar 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.Mer information och alla fält som stöds finns i Checkout Sessions Integration Guide.

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 du anger och omdirigerar webbläsaren dit. CustomerPortal tar emot samma bearerToken- och environment-alternativ som Checkout.
Handlern kontrollerar inte vem som anropar den. Alla som begär den med ett customer ID får den kundens portal. Skydda routen med din egen autentisering och skicka endast den inloggade användarens customer ID.

Query Parameters

string
obligatorisk
Customer ID för portalsessionen, till exempel ?customer_id=cus_123.
boolean
Om värdet är true skickar Dodo Payments även portal-länken till kunden via e-post.
Handlern returnerar 400 om customer_id saknas och 500 om portalsessionen inte kan skapas.

Webhook Route Handler

Webhook route handler verifierar varje request med din webhook-hemlighet, som skickas som webhookKey, innan den kör din kod:
  • Method: Endast POST requests stöds. Andra metoder 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: Validerar payloaden med Zod. Returnerar 400 för en ogiltig payload.
  • Error Handling:
    • 401: Ogiltig signatur
    • 400: Ogiltig payload
    • 500: Internt fel under verifieringen
  • Event Routing: Anropar onPayload för varje händelse, därefter handlern för händelsetypen, och returnerar 200.
Adaptern fångar inte fel som kastas i dina handlers. De propag­eras till TanStack Start och requesten misslyckas.

Webhook Event Handlers som stöds

Varje handler är valfri och async och tar emot den verifierade payloaden för sin händelsetyp:
Se Webhook Event Guide för information om vad varje händelse betyder.

Prompt för LLM

Kopiera den här prompten till din AI coding assistant för att låta den lägga till adaptern i ditt projekt. Om du även vill ge din agent Dodo Payments-dokumentationen och skills installerar du Agent Plugin.
Senast ändrad 26 september 2026