@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 Skapa API-nyckeln under Developer → API Keys. Lägg till din webhook-endpoint under Developer → Webhooks och kopiera dess signeringshemlighet till
.env i projektets rotkatalog: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.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.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
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.
Static Checkout (GET)
Static Checkout (GET)
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.true och motsvarande fält har ett värde, till exempel email med disableEmail. Handlern skickar dessa parametrar till en statisk betalningslänk.Svarsformat
Statisk checkout returnerar ett JSON-svar med checkout-URL:en:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 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(medstreet,city,state,countryochzipcode) ochcustomer, samtproduct_id(med en valfriquantity) ellerproduct_cart. Prenumerationer kräverproduct_id. - Handlern vidarebefordrar även
metadata,allowed_payment_method_types,billing_currency,discount_codes(eller det föråldradediscount_code),return_url,show_saved_payment_methodsochtax_id. För prenumerationer vidarebefordras ävenaddons,on_demandochtrial_period_days. Övriga fält ignoreras. - Mer information om fälten finns i:
Svarsformat
Dynamisk checkout returnerar ett JSON-svar med betalningslänken som checkout-URL:Checkout Sessions (POST)
Checkout Sessions (POST)
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 icustomer_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.Route handler för webhook
Webhook-handlern verifierar varje förfrågan med din webhook-hemlighet, som skickas somwebhookKey, 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-timestampochwebhook-signaturemedwebhookKeyenligt 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
onPayloadfö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.