Skip to main content
@dodopayments/astro パッケージは、Astro プロジェクトに3つの endpoint handler を提供します。Checkout は checkout URL を返し、CustomerPortal は顧客を Customer Portal に移動させ、Webhooks は webhook event を検証してコードにルーティングします。

Checkout Handler

static、dynamic、checkout session のフローで checkout URL を作成します。

Customer Portal

顧客が subscription と詳細情報を管理できるようにします。

Webhooks

Dodo Payments webhook event を受信して処理します。

Installation

1

Install the Package

このコマンドをプロジェクトの root で実行します:
このパッケージは、peer dependency として Astro 4 または 5、および zod 3.25 以降を指定しています。
2

Set Up Environment Variables

プロジェクトの root に .env ファイルを作成します。Developer → API Keys で API key を作成します。Developer → Webhooks で webhook endpoint を追加し、その Signing secret を DODO_PAYMENTS_WEBHOOK_KEY にコピーします:
DODO_PAYMENTS_RETURN_URL は、checkout 後に顧客が移動する場所です。environment を渡さない場合、handler は live_mode を使用します。test mode の API key は test_mode でのみ機能します。
.env ファイルや secrets を version control に commit しないでください。

Route Handler の例

この例は src/pages/api/ にある Astro server endpoint です。Dodo Payments を呼び出す endpoint は on demand で render する必要があるため、Astro プロジェクトに server adapter を追加します。Astro のデフォルトの static output mode では endpoint が build 時に render されるため、各例では代わりに prerender = false を export して、リクエストごとに endpoint を render します。
この handler を使用して、Dodo Payments checkout をアプリに追加します。GET handler は static checkout を提供します。POST handler は checkout session を提供します。また、type: "dynamic" を設定した場合は dynamic checkout を提供します。endpoint file から export できる POST handler は1つだけなので、dynamic checkout の例では type: "dynamic" を設定しているものとします。

Checkout Route Handler

checkout handler は、Dodo Payments で支払いを受け付ける次の3つの方法すべてに対応しています:
  • Static Payment Links: コードなしで支払いを受け付ける共有可能な URL。
  • Dynamic Payment Links: カスタム詳細情報を指定して生成する payment link。deprecated endpoint を使用します。
  • Checkout Sessions: product cart、顧客情報、カスタマイズ options を備えた hosted checkout。推奨されるフローです。
Checkout は次の options を受け取ります: この handler は GET request に対して static checkout を提供します。POST request に対しては、type が dynamic の場合に dynamic payment link を作成し、それ以外の場合は checkout session を作成します。

Supported Query Parameters

string
必須
Product identifier。例: ?productId=pdt_nZuwz45WAs64n3l07zpQR。
integer
デフォルト:"1"
product の数量。
string
顧客の氏名。firstName または lastName が指定されている場合は無視されます。
string
顧客の名。
string
顧客の姓。
string
顧客の email address。
string
顧客の国(ISO 3166-1 alpha-2 code)。
string
顧客の住所。
string
顧客の市区町村。
string
顧客の州または都道府県。
string
顧客の ZIP または postal code。
boolean
true に設定すると、氏名 field を無効にします。
boolean
true に設定すると、名 field を無効にします。
boolean
true に設定すると、姓 field を無効にします。
boolean
true に設定すると、email field を無効にします。
boolean
true に設定すると、country field を無効にします。
boolean
true に設定すると、address line field を無効にします。
boolean
true に設定すると、city field を無効にします。
boolean
true に設定すると、state field を無効にします。
boolean
true に設定すると、ZIP code field を無効にします。
string
Payment currency。例: USD。
boolean
デフォルト:"true"
currency selector を表示または非表示にします。
number
請求額を major currency unit で固定します。例: $12.50 の場合は 12.5。Pay What You Want product でのみ機能し、product の minimum price 未満の場合は無視されます。
boolean
デフォルト:"true"
discounts section を表示または非表示にします。
string
metadata_ で始まる query parameter は、metadata として checkout に渡されます。例: metadata_orderId=123。
disable flag は、対応する field に値がある場合にのみ有効になります。例: disableEmail=true と組み合わせた email。handler は config の returnUrl を redirect_url として link に追加します。
productId がない場合、handler は 400 response を返します。無効な query parameter や、account に存在しない product の場合も 400 を返します。

Response Format

static checkout は checkout URL を含む JSON response を返します。test mode では、URL は test.checkout.dodopayments.com を使用します:
  • parameter を JSON body として POST request で送信します。
  • one-time payment と recurring payment の両方に対応します。handler は product を取得し、recurring product の場合は subscription を、それ以外の場合は one-time payment を作成します。
  • body には billing(street、city、state、country、zipcode を含む)と customer、さらに product_id または product_cart が必要です。subscription には product_id が必要です。
  • 対応するすべての body field については、以下を参照してください:
Dynamic checkout は deprecated な POST /payments および POST /subscriptions endpoint の proxy です。既存の integration では引き続き動作しますが、新しい integration では checkout session を使用してください。

Response Format

Dynamic checkout は、payment link を checkout URL として含む JSON response を返します:
Checkout session は、カスタマイズを完全に制御しながら、one-time purchase と subscription 用の hosted checkout を作成します。product_cart が唯一の必須 field で、少なくとも1つの product が必要です。body に return_url がない場合、handler は config の returnUrl を使用します。各 checkout_url は1回だけ使用でき、24時間後に expire します。confirm: true を渡した場合は15分後に expire します。payment_method_id で作成した session は checkout_url を返さないため、handler は 400 で応答します。詳細と対応するすべての field については、Checkout Sessions Integration Guide を参照してください。

Response Format

Checkout session は checkout URL を含む JSON response を返します:

Customer Portal Route Handler

Customer Portal route handler は、指定された顧客の Customer Portal session を作成し、browser をそこへ redirect します。CustomerPortal は、Checkout と同じ bearerToken および environment options を受け取ります。
handler は、誰が呼び出しているかを確認しません。customer ID を指定してリクエストした人は誰でも、その顧客の portal を取得できます。独自の authentication で route を保護し、ログイン中のユーザーの customer ID のみを渡してください。

Query Parameters

string
必須
portal session の customer ID。例: ?customer_id=cus_123。
boolean
true に設定すると、Dodo Payments は portal link も顧客に email で送信します。
customer_id がない場合、handler は 400 を返し、portal session を作成できない場合は 500 を返します。

Webhook Route Handler

webhook route handler は、コードを実行する前に webhookKey として渡された webhook secret を使用して各 request を検証します:
  • Method: POST request のみ対応します。他の method は 405 を返します。
  • Signature Verification: Standard Webhooks specification に従い、webhookKey を使用して webhook-id、webhook-timestamp、webhook-signature header を検証します。検証に失敗すると 401 を返します。
  • Payload Validation: payload を Zod で検証します。無効な payload には 400 を返します。
  • Error Handling:
    • 401: 無効な signature
    • 400: 無効な payload
    • 500: 検証中の internal error
  • Event Routing: すべての event に対して onPayload を呼び出し、その後 event の type に対応する handler を呼び出して 200 を返します。
adaptor は handler で throw された error を捕捉しません。error は Astro に伝播し、request は失敗します。

Supported Webhook Event Handlers

各 handler は optional かつ async で、対応する event type の検証済み payload を受け取ります:
各 event の意味については、Webhook Event Guide を参照してください。

LLM 用 prompt

この prompt を AI coding assistant にコピーすると、adaptor をプロジェクトに追加できます。agent に Dodo Payments の docs と skills も提供するには、Agent Plugin を install してください。
最終更新日 2026年9月26日