@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
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
顧客の street address。
string
顧客の city。
string
顧客の state または province。
string
顧客の postal code または ZIP code。
boolean
true に設定すると、full name field を無効にします。boolean
true に設定すると、first name field を無効にします。boolean
true に設定すると、last name 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。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
string
必須
portal session の customer ID。例:
?customer_id=cus_123。boolean
true に設定すると、顧客に portal link を email で送信します。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 しません。