Hoppa till huvudinnehåll

Installation

1

Installera paketet

Kör följande kommando i din projektrot:
npm install @dodopayments/hono
2

Ställ in miljövariabler

Skapa en .env fil i din projektrot:
DODO_PAYMENTS_API_KEY=your-api-key
DODO_PAYMENTS_RETURN_URL=https://yourapp.com/success
DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secret
DODO_PAYMENTS_ENVIRONMENT="test_mode" or "live_mode""
Kom ihåg att aldrig committa din .env fil eller hemligheter till versionskontroll.

Exempel på Route Handlers

Alla exempel förutsätter att du använder Hono App Router.
Använd denna handler för att integrera Dodo Payments checkout i din Hono-app. Stöder statiska (GET), dynamiska (POST) och sessions (POST) flöden.
  // route.ts
  import { Checkout } from '@dodopayments/hono';
  import Hono from 'hono'

  const app = new Hono()

  app.get(
  "/api/checkout",
  Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
      type: 'static'
  })
  );

  app.post(
  "/api/checkout",
  Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
      type: 'dynamic'
  })
  );
  
  app.post(
  "/api/checkout",
  Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
      type: 'session'
  })
  );
curl --request GET \
--url 'https://example.com/api/checkout?productId=pdt_fqJhl7pxKWiLhwQR042rh' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test
curl --request POST \
--url https://example.com/api/checkout \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test \
--data '{
"billing": {
  "city": "Texas",
  "country": "US",
  "state": "Texas",
  "street": "56, hhh",
  "zipcode": "560000"
},
"customer": {
  "email": "[email protected]",
  	"name": "test"
},
"metadata": {},
"payment_link": true,
  "product_id": "pdt_QMDuvLkbVzCRWRQjLNcs",
  "quantity": 1,
  "billing_currency": "USD",
  "discount_code": "IKHZ23M9GQ",
  "return_url": "https://example.com",
  "trial_period_days": 10
}'
curl --request POST \
--url https://example.com/api/checkout \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test \
--data '{
"product_cart": [
  {
    "product_id": "pdt_QMDuvLkbVzCRWRQjLNcs",
    "quantity": 1
  }
],
"customer": {
  "email": "[email protected]",
  "name": "test"
},
"return_url": "https://example.com/success"
}'

Checkout Route Handler

Dodo Payments stöder tre typer av betalningsflöden för att integrera betalningar på din webbplats, denna adaptor stöder alla typer av betalningsflöden.
  • Statiska betalningslänkar: Omedelbart delbara URL:er för snabb, kodfri insamling av betalningar.
  • Dynamiska betalningslänkar: Programmatisk generering av betalningslänkar med anpassade detaljer med hjälp av API eller SDK:er.
  • Checkout-sessioner: Skapa säkra, anpassningsbara checkout-upplevelser med förkonfigurerade produktvagnar och kunddetaljer.

Stödda frågeparametrar

productId
string
obligatorisk
Produktidentifierare (t.ex. ?productId=pdt_nZuwz45WAs64n3l07zpQR).
quantity
integer
Antal av produkten.
fullName
string
Kundens fullständiga namn.
firstName
string
Kundens förnamn.
lastName
string
Kundens efternamn.
email
string
Kundens e-postadress.
country
string
Kundens land.
addressLine
string
Kundens adressrad.
city
string
Kundens stad.
state
string
Kundens stat/provins.
zipCode
string
Kundens postnummer.
disableFullName
boolean
Inaktivera fältet för fullständigt namn.
disableFirstName
boolean
Inaktivera fältet för förnamn.
disableLastName
boolean
Inaktivera fältet för efternamn.
disableEmail
boolean
Inaktivera fältet för e-post.
disableCountry
boolean
Inaktivera fältet för land.
disableAddressLine
boolean
Inaktivera fältet för adressrad.
disableCity
boolean
Inaktivera fältet för stad.
disableState
boolean
Inaktivera fältet för stat.
disableZipCode
boolean
Inaktivera fältet för postnummer.
paymentCurrency
string
Specificera betalningsvalutan (t.ex. USD).
showCurrencySelector
boolean
Visa valutaväljare.
paymentAmount
integer
Specificera betalningsbeloppet (t.ex. 1000 för $10.00).
showDiscounts
boolean
Visa rabattfält.
metadata_*
string
Eventuella frågeparametrar som börjar med metadata_ kommer att skickas som metadata.
Om productId saknas returnerar handlern ett 400-svar. Ogiltiga frågeparametrar resulterar också i ett 400-svar.

Svarsformat

Statisk checkout returnerar ett JSON-svar med checkout-URL:en:
{
  "checkout_url": "https://checkout.dodopayments.com/..."
}

Svarsformat

Dynamisk checkout returnerar ett JSON-svar med checkout-URL:en:
{
  "checkout_url": "https://checkout.dodopayments.com/..."
}
Checkout-sessioner ger en mer säker, värd checkout-upplevelse som hanterar hela betalningsflödet för både engångsköp och prenumerationer med full anpassningskontroll.Se Checkout Sessions Integration Guide för mer information och en komplett lista över stödda fält.

Svarsformat

Checkout-sessioner returnerar ett JSON-svar med checkout-URL:en:
{
  "checkout_url": "https://checkout.dodopayments.com/session/..."
}

Customer Portal Route Handler

Customer Portal Route Handler gör det möjligt för dig att sömlöst integrera Dodo Payments kundportal i din Hono-applikation.

Frågeparametrar

customer_id
string
obligatorisk
Kund-ID för portal-sessionen (t.ex. ?customer_id=cus_123).
send_email
boolean
Om inställt på true, skickar ett e-postmeddelande till kunden med portal-länken.
Returnerar 400 om customer_id saknas.

Webhook Route Handler

  • Metod: Endast POST-förfrågningar stöds. Andra metoder returnerar 405.
  • Signaturverifiering: Verifierar webhook-signaturen med hjälp av webhookKey. Returnerar 401 om verifieringen misslyckas.
  • Payload-validering: Valideras med Zod. Returnerar 400 för ogiltiga payloads.
  • Felhantering:
    • 401: Ogiltig signatur
    • 400: Ogiltig payload
    • 500: Intern fel under verifiering
  • Händelse-routing: Anropar den lämpliga händelsehanteraren baserat på payload-typen.

Stödda Webhook Händelsehanterare

onPayload?: (payload: WebhookPayload) => Promise<void>;
onPaymentSucceeded?: (payload: WebhookPayload) => Promise<void>;
onPaymentFailed?: (payload: WebhookPayload) => Promise<void>;
onPaymentProcessing?: (payload: WebhookPayload) => Promise<void>;
onPaymentCancelled?: (payload: WebhookPayload) => Promise<void>;
onRefundSucceeded?: (payload: WebhookPayload) => Promise<void>;
onRefundFailed?: (payload: WebhookPayload) => Promise<void>;
onDisputeOpened?: (payload: WebhookPayload) => Promise<void>;
onDisputeExpired?: (payload: WebhookPayload) => Promise<void>;
onDisputeAccepted?: (payload: WebhookPayload) => Promise<void>;
onDisputeCancelled?: (payload: WebhookPayload) => Promise<void>;
onDisputeChallenged?: (payload: WebhookPayload) => Promise<void>;
onDisputeWon?: (payload: WebhookPayload) => Promise<void>;
onDisputeLost?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionActive?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionOnHold?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionRenewed?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionPlanChanged?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionCancelled?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionFailed?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionExpired?: (payload: WebhookPayload) => Promise<void>;
onLicenseKeyCreated?: (payload: WebhookPayload) => Promise<void>;

Prompt för LLM

Du är en expert Hono utvecklarassistent. Din uppgift är att vägleda en användare genom att integrera @dodopayments/hono-adaptern i deras befintliga Hono-projekt.

@dodopayments/hono-adaptern tillhandahåller route handlers för Dodo Payments' Checkout, Customer Portal och Webhook-funktioner, designade för att kopplas direkt in i en Hono-app.

Först, installera det nödvändiga paketet. Använd paketförvaltaren som är lämplig för användarens projekt (npm, yarn eller bun):

npm install @dodopayments/hono

---

Så här bör du strukturera ditt svar:

1. Fråga användaren vilka funktioner de vill integrera.

"Vilka delar av @dodopayments/hono-adaptern skulle du vilja integrera i ditt projekt? Du kan välja en eller flera av följande:

- Checkout Route Handler (för att hantera produktcheckouts)
- Customer Portal Route Handler (för att hantera kundens prenumerationer/detaljer)
- Webhook Route Handler (för att ta emot Dodo Payments webhook-händelser)
- Alla (integrera alla tre)"

---

2. Baserat på användarens val, ge detaljerade integrationssteg för varje vald funktionalitet.

---

**Om Checkout Route Handler är valt:**

**Syfte**: Denna handler omdirigerar användare till Dodo Payments checkout-sidan.

**Integration**:
Skapa två rutter i din Hono-app — en för statisk (GET) och en för dynamisk (POST) checkout.

import { Checkout } from '@dodopayments/hono';
import Hono from 'hono'

const app = new Hono()

app.get(
  "/api/checkout",
  Checkout({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
    returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
    type: 'static'
  })
);

app.post(
  "/api/checkout",
  Checkout({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
    returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
    type: 'session' // eller 'dynamic' för dynamisk länk
  })
);

Konfigurationsalternativ:

    bearerToken: Din Dodo Payments API-nyckel (rekommenderas att lagras i miljövariabeln DODO_PAYMENTS_API_KEY).

    returnUrl (valfritt): URL för att omdirigera användaren efter en lyckad checkout.

    environment: "test_mode" eller "live_mode"

    type: "static" (GET) eller "dynamic" (POST) eller "session" (POST)

GET (statisk checkout) förväntar sig frågeparametrar:

    productId (obligatorisk)

    quantity, kundfält (fullName, email, etc.), och metadata (metadata_*) är valfria.

POST (dynamisk checkout) förväntar sig en JSON-kropp med betalningsdetaljer (engångs- eller prenumeration). Referera till dokumentationen för hela POST-schemat:

    Engångsbetalningar: https://docs.dodopayments.com/api-reference/payments/post-payments

    Prenumerationer: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions

POST (checkout-sessioner) - (Rekommenderas) En mer anpassningsbar checkout-upplevelse. Returnerar JSON med checkout_url: Parametrar skickas som en JSON-kropp. Stöder både engångs- och återkommande betalningar. Returnerar: {"checkout_url": "https://checkout.dodopayments.com/session/..."}. För en komplett lista över stödda fält, se:

  Checkout Sessions Integration Guide: https://docs.dodopayments.com/developer-resources/checkout-session

Om Customer Portal Route Handler är valt:

Syfte: Denna rutt låter kunder hantera sina prenumerationer via Dodo Payments-portalen.

Integration:

import { Checkout } from '@dodopayments/hono';
import Hono from 'hono'

const app = new Hono()
app.get(
  "/api/customer-portal",
  CustomerPortal({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT
  })
);

Frågeparametrar:

    customer_id (obligatorisk): t.ex. ?customer_id=cus_123

    send_email (valfritt): om sant, får kunden ett e-postmeddelande med portal-länken

Returnerar 400 om customer_id saknas.

Om Webhook Route Handler är valt:

Syfte: Bearbetar inkommande webhook-händelser från Dodo Payments för att utlösa händelser i din app.

Integration:

import Hono from 'hono'
import { Webhooks } from '@dodopayments/hono'

const app = new Hono()
app.post(
  "/api/webhooks",
  Webhooks({
    webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY,
    onPayload: async (payload) => {
      // Hantera payload här
      console.log(payload)
    }
  })
);

Funktioner:

    Endast POST-metod är tillåten — andra returnerar 405

    Signaturverifiering utförs med hjälp av webhookKey. Returnerar 401 om ogiltig.

    Zod-baserad payload-validering. Returnerar 400 om ogiltig schema.

    Alla handlers är asynkrona funktioner.

Stödda Webhook Händelsehanterare:

Du kan skicka in någon av följande handlers:

    onPayload

    onPaymentSucceeded

    onPaymentFailed

    onPaymentProcessing

    onPaymentCancelled

    onRefundSucceeded

    onRefundFailed

    onDisputeOpened, onDisputeExpired, onDisputeAccepted, onDisputeCancelled, onDisputeChallenged, onDisputeWon, onDisputeLost

    onSubscriptionActive, onSubscriptionOnHold, onSubscriptionRenewed, onSubscriptionPaused, onSubscriptionPlanChanged, onSubscriptionCancelled, onSubscriptionFailed, onSubscriptionExpired

    onLicenseKeyCreated

Inställning av miljövariabler:

Se till att definiera dessa miljövariabler i ditt projekt:

DODO_PAYMENTS_API_KEY=din-api-nyckel
DODO_PAYMENTS_RETURN_URL=https://yourapp.com/success
DODO_PAYMENTS_WEBHOOK_KEY=din-webhook-hemlighet
DODO_PAYMENTS_ENVIRONMENT="test_mode" eller "live_mode""

Använd dessa i din kod som:

process.env.DODO_PAYMENTS_API_KEY
process.env.DODO_PAYMENTS_WEBHOOK_KEY

Säkerhetsnotering: Kom ihåg att INTE committa hemligheter till versionskontroll. Använd .env-filer lokalt och hemlighetsförvaltare i distributionsmiljöer (t.ex. AWS, Vercel, Heroku, etc.).