@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 でのみ機能します。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 します。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
この 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 を作成します。
Static Checkout (GET)
Static Checkout (GET)
Supported Query Parameters
請求額を major currency unit で固定します。例: $12.50 の場合は
12.5。Pay What You Want product でのみ機能し、product の minimum price 未満の場合は無視されます。disableEmail=true と組み合わせた email。handler は config の returnUrl を redirect_url として link に追加します。Response Format
static checkout は checkout URL を含む JSON response を返します。test mode では、URL はtest.checkout.dodopayments.com を使用します:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 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 については、以下を参照してください:
Response Format
Dynamic checkout は、payment link を checkout URL として含む JSON response を返します:Checkout Sessions (POST)
Checkout Sessions (POST)
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 を受け取ります。
Query Parameters
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-signatureheader を検証します。検証に失敗すると 401 を返します。 - Payload Validation: payload を Zod で検証します。無効な payload には 400 を返します。
- Error Handling:
- 401: 無効な signature
- 400: 無効な payload
- 500: 検証中の internal error
- Event Routing: すべての event に対して
onPayloadを呼び出し、その後 event の type に対応する handler を呼び出して 200 を返します。