@dodopayments/hono adaptor は、Hono アプリに3つの route handler を提供します。Checkout は checkout URL を返し、CustomerPortal は Customer Portal に顧客を誘導し、Webhooks は webhook request を検証してイベント handler を呼び出します。
Checkout Handler
Hono アプリから payment link と checkout session を作成します。
Customer Portal
顧客がサブスクリプションと詳細情報を管理できるようにします。
Webhooks
Dodo Payments webhook event を検証して処理します。
インストール
1
Install the Package
プロジェクトのルートで次のコマンドを実行します:このパッケージには Hono 4.8.9 以降が必要です。
2
Set Up Environment Variables
プロジェクトのルートに Developer → API Keys で API key を作成します。Developer → Webhooks で webhook endpoint を追加し、その signing secret を
.env ファイルを作成します:DODO_PAYMENTS_WEBHOOK_KEY にコピーします。開発中は DODO_PAYMENTS_ENVIRONMENT=test_mode を指定した test mode API key を使用してください。test mode key は test mode に対してのみ機能します。DODO_PAYMENTS_RETURN_URL は任意です。Route Handler の例
この例では、
new Hono() で作成した Hono アプリに route を登録します。handler 自身が request body を読み取るため、body-parsing middleware は必要ありません。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
この handler を使用して、Dodo Payments checkout を Hono アプリに統合します。static (GET)、dynamic (POST)、session (POST) の flow をサポートします。Hono は request に対して実行された最初の handler で停止するため、各 POST flow はそれぞれ異なる path に登録してください。
Checkout Route Handler
adaptor は3つすべての Dodo Payments checkout flow をサポートします。handler config で
type を設定し、その route が提供する flow を選択します。すべての flow は、顧客が開く checkout_url を含む JSON を返します。- Static Payment Links:
type: "static"、GET。query parameter を使用して1つの product の payment link を作成します。作成前に product の存在を確認します。 - Dynamic Payment Links:
type: "dynamic"、POST。product が recurring かどうかに応じて、payment link 付きの one-time payment または subscription を作成します。 - Checkout Sessions:
type: "session"、POST。product cart と顧客情報から checkout session を作成します。新しい統合にはこの flow を使用してください。
Checkout は次の options を受け取ります:
type が static の場合は GET に、dynamic または session の場合は POST に handler を登録します。handler は POST 以外のすべての request を static checkout request として扱います。
Static Checkout (GET)
Static Checkout (GET)
サポートされる Query Parameter
請求額を major currency unit で固定します。例: $12.50 の場合は
12.5。Pay What You Want product のみで機能し、product の minimum price 未満の場合は無視されます。true であり、対応する field に値がある場合にのみ有効になります。例: disableEmail を持つ email。handler はこれらの parameter を static payment link に渡します。Response Format
Static checkout は checkout URL を含む JSON response を返します:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- parameter は POST request の JSON body として送信します。
- one-time payment と recurring payment の両方をサポートします。handler は product を取得し、product が recurring の場合は subscription を、それ以外の場合は one-time payment を作成します。
- body には
billing(street、city、state、country、zipcodeを含む)とcustomer、およびproduct_id(任意のquantityを含む)またはproduct_cartが必要です。Subscription にはproduct_idが必要です。 - handler は
metadata、allowed_payment_method_types、billing_currency、discount_codes(または deprecated なdiscount_code)、return_url、show_saved_payment_methods、tax_idも転送します。Subscription の場合はaddons、on_demand、trial_period_daysも転送します。その他の field は無視します。 - field の詳細については、次を参照してください:
Response Format
Dynamic checkout は、payment link を checkout URL として含む JSON response を返します:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout session payload を JSON body として送信します。handler は checkout session を作成します。これにより one-time purchase と subscription の完全な payment flow が処理され、その
checkout_url が返されます。product_cart は必須で、少なくとも1つの product を含める必要があります。各 checkout_url は1回だけ使用でき、24時間後に期限切れになります。confirm: true を渡した場合は15分後に期限切れになります。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_id の顧客用に Customer Portal session を作成し、request を portal link に redirect します。CustomerPortal は、Checkout と同じ bearerToken および environment options を受け取ります。Dodo Payments が session を作成できない場合、handler は 500 を返します。
Query Parameters
Webhook Route Handler
Webhook handler は、webhookKey として渡された webhook secret を使用して各 request を検証し、その後 event handler を呼び出します。raw request body 自身を読み取るため、route に body-parsing middleware は必要ありません。
- Method: POST request のみサポートされます。その他の method は 405 を返します。
- Signature Verification:
webhook-id、webhook-timestamp、webhook-signatureheader をwebhookKeyで検証します。Standard Webhooks specification に従います。検証に失敗すると 401 を返します。 - Payload Validation: Zod で検証します。無効な payload の場合は 400 を返します。
- Error Handling:
- 401: Invalid signature
- 400: Invalid payload
- 500: 検証中の Internal error
- Event Routing: すべての event に対して
onPayloadを呼び出し、その後 event type 用の handler を呼び出します。処理が完了すると 200 を返します。handler は event handler が throw した error を catch しません。