@dodopayments/tanstack packageは、TanStack Start projectに3つのrequest handlersを提供します。Checkoutはcheckout URLsを返し、CustomerPortalはcustomerをCustomer Portalに移動させ、Webhooksはwebhook eventsを検証してコードにルーティングします。各handlerは標準のRequestを受け取り、Responseを返すため、server route handlerから呼び出せます。
Checkout Handler
static、dynamic、checkout session flowsでcheckout URLsを作成します。
Customer Portal
customerがsubscriptionsとdetailsを管理できるようにします。
Webhooks
Dodo Payments webhook eventsを受信して処理します。
Installation
1
Install the Package
このコマンドをproject rootで実行します:packageにはpeer dependencyとして
zod 3.25以降も必要です。2
Set Up Environment Variables
project rootにTanStack Startは
.env fileを作成します。API keyは Developer → API Keys で作成します。Developer → Webhooks でwebhook endpointを追加し、その Signing secret をDODO_PAYMENTS_WEBHOOK_KEYにコピーします:.env filesを読み込み、server routesはprocess.envから値を読み取ります。DODO_PAYMENTS_RETURN_URLはcheckout後にcustomerが移動する場所です。environmentを渡さない場合、handlersはlive_modeを使用します。test mode API keyはtest_modeでのみ動作します。Route Handler Examples
このexamplesは
src/routes/api/にあるTanStack Start server routesです。それぞれcreateFileRouteのserver.handlersでhandlersを定義します。1.129などの古いTanStack Start releasesでは、@tanstack/react-start/serverのcreateServerFileRouteと.methods() callを使用してserver routesを定義します。Dodo Payments handlersは両方のAPIで同じように動作します。requestを渡してください。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
このhandlerを使用して、Dodo Payments checkoutをappに追加します。
GET handlerはstatic checkoutを提供します。POST handlerはcheckout sessionsを提供します。また、type: "dynamic"を設定した場合はdynamic checkoutを提供します。dynamic checkout exampleではtype: "dynamic"を設定していることを前提としています。Checkout Route Handler
checkout handlerは、Dodo Paymentsでpaymentsを受け付ける3つの方法すべてをサポートします:- Static Payment Links: コードなしでpaymentsを受け付ける共有可能なURLs。
- Dynamic Payment Links: custom detailsを指定して生成するpayment links。deprecated endpointsを使用します。
- Checkout Sessions: product cart、customer details、customization optionsを備えたhosted checkout。推奨されるflowです。
Checkoutは次のoptionsを受け取ります:
handlerは
GET requestsに対してstatic checkoutを提供します。POST requestsでは、typeがdynamicの場合はdynamic payment linkを作成し、それ以外の場合はcheckout sessionを作成します。
Static Checkout (GET)
Static Checkout (GET)
Supported Query Parameters
string
必須
Product identifier。例:
?productId=pdt_nZuwz45WAs64n3l07zpQR。integer
デフォルト:"1"
Productの数量。
string
Customerのfull name。
firstNameまたはlastNameが指定されている場合は無視されます。string
Customerのfirst name。
string
Customerのlast name。
string
Customerのemail address。
string
Customerのcountry。ISO 3166-1 alpha-2 codeで指定します。
string
Customerのstreet address。
string
Customerのcity。
string
Customerのstateまたはprovince。
string
CustomerのZIPまたはpostal 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 unitsで固定します。例: $12.50の場合は
12.5。Pay What You Want productsでのみ機能し、productのminimum price未満の場合は無視されます。boolean
デフォルト:"true"
Discounts sectionを表示または非表示にします。
string
metadata_で始まるquery parameterは、metadataとしてcheckoutに渡されます。例: metadata_orderId=123。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)
- parametersをPOST requestのJSON bodyとして送信します。
- one-time paymentsとrecurring paymentsの両方をサポートします。handlerはproductを取得し、productがrecurringの場合はsubscriptionを、それ以外の場合はone-time paymentを作成します。
- サポートされるすべてのbody fieldsについては、以下を参照してください:
Response Format
Dynamic checkoutはpayment linkをcheckout URLとして含むJSON responseを返します:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout sessionsは、customizationを完全に制御できるhosted checkoutを、one-time purchasesとsubscriptions向けに作成します。
product_cartが唯一のrequired fieldで、少なくとも1つのproductが必要です。bodyにreturn_urlがない場合、handlerはconfigのreturnUrlを使用します。各checkout_urlは1回のみ使用でき、24時間後にexpiresします。confirm: trueを渡した場合は15分後にexpiresします。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のCustomer Portal sessionを作成し、browserをそのsessionにredirectします。CustomerPortalは、Checkoutと同じbearerTokenおよびenvironment optionsを受け取ります。
Query Parameters
string
必須
portal sessionのcustomer ID。例:
?customer_id=cus_123。boolean
trueに設定すると、Dodo Paymentsはportal linkをcustomerにもemailで送信します。customer_idがない場合、handlerは400を返し、portal sessionを作成できない場合は500を返します。
Webhook Route Handler
webhook route handlerは、コードを実行する前に、webhookKeyとして渡されたwebhook secretを使用して各requestを検証します:
- Method: POST requestsのみサポートされます。その他のmethodsは405を返します。
- Signature Verification: Standard Webhooks specificationに従い、
webhookKeyを使用してwebhook-id、webhook-timestamp、webhook-signatureheadersを検証します。検証に失敗すると401を返します。 - Payload Validation: payloadをZodで検証します。invalid payloadの場合は400を返します。
- Error Handling:
- 401: Invalid signature
- 400: Invalid payload
- 500: 検証中のInternal error
- Event Routing: すべてのeventに対して
onPayloadを呼び出し、その後eventのtypeに対応するhandlerを呼び出して200を返します。