@dodopayments/fastify adaptor は Fastify アプリに 3 つの route handler を提供します。Checkout はチェックアウト URL を返し、CustomerPortal は顧客を Customer Portal に移動させ、Webhooks は Webhook リクエストを検証してイベントハンドラーを呼び出します。
Checkout Handler
Fastify アプリから payment link と checkout session を作成します。
Customer Portal
顧客がサブスクリプションと詳細情報を管理できるようにします。
Webhooks
Dodo Payments の Webhook イベントを検証して処理します。
インストール
1
Install the Package
プロジェクトのルートで次のコマンドを実行します。このパッケージには Fastify 5.4.0 以降が必要です。
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 の例
この例では、
Fastify() で作成した Fastify instance に route を登録します。Webhook route では raw request body が必要なため、Webhook route だけを含む plugin 内に string body parser を追加しています。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
この handler を使用して、Dodo Payments の checkout を Fastify アプリに統合します。static (GET)、dynamic (POST)、session (POST) の payment flow に対応しています。
Checkout() は static flow では getHandler を、dynamic および session flow では postHandler を返します。各 POST flow はそれぞれ独自の path に登録してください。Checkout Route Handler
この adaptor は Dodo Payments の 3 つすべての checkout flow に対応しています。handler config の
type を設定して、route が提供する flow を選択します。すべての flow は、顧客が開く checkout_url を含む JSON を返します。- Static Payment Links:
type: "static"、GET。query parameters から 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 を作成します。新しい integration ではこの flow を使用してください。
Checkout は次の options を受け取ります。
Checkout は 2 つの handler を持つ object を返します。type が static の場合は GET に getHandler を登録し、type が dynamic または session の場合は POST に postHandler を登録します。
Static Checkout (GET)
Static Checkout (GET)
対応している 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 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
支払い通貨。例:
USD。boolean
デフォルト:"true"
通貨 selector を表示または非表示にします。
number
請求額を major currency unit で固定します。例:$12.50 の場合は
12.5。Pay What You Want product でのみ機能し、product の最低価格を下回る場合は無視されます。boolean
デフォルト:"true"
discounts section を表示または非表示にします。
string
metadata_ で始まる query parameter は metadata として checkout に渡されます。例:metadata_orderId=123。true で、対応する field に値がある場合にのみ有効になります。例:disableEmail を指定した email。handler はこれらの parameters を static payment link に渡します。Response Format
Static checkout は checkout URL を含む JSON response を返します。Dynamic Checkout (POST)
Dynamic Checkout (POST)
- POST request の JSON body として parameters を送信します。
- one-time payment と recurring payment の両方に対応します。handler は product を取得し、product が recurring の場合は subscription、それ以外の場合は one-time payment を作成します。
- body には
street、city、state、country、zipcodeを含むbillingとcustomerが必要です。さらに、任意のquantityを含むproduct_idまたはproduct_cartも必要です。subscription にはproduct_idが必要です。 - handler は
metadata、allowed_payment_method_types、billing_currency、discount_codes(非推奨のdiscount_codeも可)、return_url、show_saved_payment_methods、tax_idも転送します。subscription の場合はaddons、on_demand、trial_period_daysも転送します。それ以外の fields は無視します。 - 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 を作成します。この session は one-time purchase と subscription の完全な payment flow を処理し、その
checkout_url を返します。product_cart は必須で、少なくとも 1 つの product を含める必要があります。各 checkout_url は一度だけ使用でき、24 時間後に期限切れになります。confirm: true を渡した場合は 15 分後に期限切れになります。payment_method_id で作成された session は checkout_url を返さないため、handler は 400 を返します。詳細と対応している fields の完全な一覧については、Checkout Sessions Integration Guide を参照してください。Response Format
Checkout sessions は checkout URL を含む JSON response を返します。Customer Portal Route Handler
Customer Portal Route Handler は、customer_id の顧客向けに Customer Portal session を作成し、request を portal link にリダイレクトします。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 を検証し、その後イベントハンドラーを呼び出します。
- Method: POST request のみ対応しています。その他の methods は 405 を返します。
- Signature Verification:
webhookKeyを使用し、Standard Webhooks specification に従ってwebhook-id、webhook-timestamp、webhook-signatureheaders を検証します。検証に失敗すると 401 を返します。 - Payload Validation: Zod で検証します。無効な payload の場合は 400 を返します。
- Error Handling:
- 401: 無効な signature
- 400: 無効な payload
- 500: 検証中の internal error
- Event Routing: すべての event に対して
onPayloadを呼び出し、その後 event の type に対応する handler を呼び出し、完了すると 200 を返します。handler は event handler が throw した errors を catch しません。