Skip to main content
Adaptern @dodopayments/hono ger din Hono-app tre route handlers: Checkout returnerar checkout-URL:er, CustomerPortal skickar en kund till Customer Portal och Webhooks verifierar webhook-förfrågningar och anropar dina event handlers.

Checkout Handler

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

Customer Portal

Låt kunder hantera sina prenumerationer och uppgifter.

Webhooks

Verifiera och bearbeta webhook-event från Dodo Payments.

Installation

1

Install the Package

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

Set Up Environment Variables

Skapa en fil med namnet .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 i testläge med DODO_PAYMENTS_ENVIRONMENT=test_mode under utvecklingen, eftersom en nyckel i testläge endast fungerar mot testläge. DODO_PAYMENTS_RETURN_URL är valfri.
Checka aldrig in filen .env eller hemligheter i versionshanteringen.

Exempel på route handlers

Exemplen registrerar routes i en Hono-app som skapats med new Hono(). Handlers läser själva request body, så de behöver ingen middleware för body-parsning.
Använd denna handler för att integrera Dodo Payments checkout i din Hono-app. Den stöder statiska (GET), dynamiska (POST) och sessionbaserade (POST) flöden. Registrera varje POST-flöde på en egen sökväg, eftersom Hono stoppar vid den första handler som körs för en förfrågan.

Checkout-route handler

Adaptern stöder alla tre checkout-flöden i 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 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 en prenumeration med en betalningslänk, beroende på om produkten är återkommande.
  • Checkout-sessioner: type: "session", POST. Skapar en checkout-session från en produktkundvagn och kunduppgifter. Använd detta flöde för nya integrationer.
Checkout tar följande alternativ: Registrera handlern för GET när type är static, och för POST när type är dynamic eller session. Handlern behandlar varje förfrågan som inte är POST som en statisk checkout-förfrågan.

Query-parametrar 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 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ä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
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 värdet understiger produktens minimipris.
boolean
standard:"true"
Visa eller dölj avsnittet för rabatter.
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 motsvarande fält har ett värde, till exempel email med disableEmail. Handlern skickar dessa parametrar till en statisk betalningslänk.
Om productId saknas returnerar handlern ett 400-svar. Ogiltiga query-parametrar eller en produkt som inte finns i 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-förfrågan.
  • Stöder både engångsbetalningar och återkommande betalningar. Handlern hämtar produkten och skapar sedan en prenumeration om produkten är återkommande, och annars en engångsbetalning.
  • Body måste innehålla billing (med street, city, state, country och zipcode) och customer, samt product_id (med en valfri quantity) eller product_cart. Prenumerationer kräver product_id.
  • Handlern vidarebefordrar även metadata, allowed_payment_method_types, billing_currency, discount_codes (eller det 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.
  • Mer information om fälten finns i:
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. 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 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å 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-sessioner returnerar ett JSON-svar med checkout-URL:en:

Route handler för Customer Portal

Route handlern för Customer Portal skapar en Customer Portal-session för kunden i customer_id och omdirigerar förfrågan till portallänken. CustomerPortal tar alternativen bearerToken och environment, samma som Checkout. Om Dodo Payments inte kan skapa sessionen returnerar handlern 500.

Query-parametrar

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

Route handler för webhook

Webhook-handlern verifierar varje förfrågan med din webhook-hemlighet, som skickas som webhookKey, och anropar sedan dina event handlers. Den läser själv den råa request body, så routen behöver ingen middleware för body-parsning.
  • Metod: Endast POST-förfrågningar stöds. Andra metoder returnerar 405.
  • Signaturverifiering: Verifierar headerna webhook-id, webhook-timestamp och webhook-signature med webhookKey enligt specifikationen för Standard Webhooks. Returnerar 401 om verifieringen misslyckas.
  • Validering av payload: Valideras med Zod. Returnerar 400 för ogiltiga payloads.
  • Felhantering:
    • 401: Ogiltig signatur
    • 400: Ogiltig payload
    • 500: Internt fel under verifieringen
  • Event-routing: Anropar onPayload för varje event, därefter handlern för eventets typ, och returnerar 200 när de är klara. Handlern fångar inte fel som dina event handlers kastar.

Webhook-event handlers som stöds

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

Prompt för LLM

Senast ändrad 26 september 2026