インストール
パッケージをインストール
プロジェクトのルートで次のコマンドを実行します: npm install @dodopayments/hono
環境変数を設定
プロジェクトのルートに.envファイルを作成します: DODO_PAYMENTS_API_KEY=your-api-key
DODO_PAYMENTS_RETURN_URL=https://yourapp.com/success
DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secret
DODO_PAYMENTS_ENVIRONMENT="test_mode" or "live_mode""
See all 5 lines
.envファイルやシークレットをバージョン管理にコミットしないでください。
ルートハンドラーの例
すべての例は、Hono App Routerを使用していることを前提としています。
チェックアウトハンドラー
顧客ポータルハンドラー
Webhookハンドラー
このハンドラーを使用して、Dodo PaymentsのチェックアウトをHonoアプリに統合します。静的(GET)、動的(POST)、およびセッション(POST)フローをサポートします。
// route.ts
import { Checkout } from '@dodopayments/hono' ;
import Hono from 'hono'
const app = new Hono ()
app . get (
"/api/checkout" ,
Checkout ({
bearerToken: process . env . DODO_PAYMENTS_API_KEY ,
environment: process . env . DODO_PAYMENTS_ENVIRONMENT ,
returnUrl: process . env . DODO_PAYMENTS_RETURN_URL ,
type: 'static'
})
);
app . post (
"/api/checkout" ,
Checkout ({
bearerToken: process . env . DODO_PAYMENTS_API_KEY ,
environment: process . env . DODO_PAYMENTS_ENVIRONMENT ,
returnUrl: process . env . DODO_PAYMENTS_RETURN_URL ,
type: 'dynamic'
})
);
app . post (
"/api/checkout" ,
Checkout ({
bearerToken: process . env . DODO_PAYMENTS_API_KEY ,
environment: process . env . DODO_PAYMENTS_ENVIRONMENT ,
returnUrl: process . env . DODO_PAYMENTS_RETURN_URL ,
type: 'session'
})
);
See all 35 lines
Static Checkout Curl example
curl --request GET \
--url 'https://example.com/api/checkout?productId=pdt_fqJhl7pxKWiLhwQR042rh' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test
See all 5 lines
Dynamic Checkout Curl example
curl --request POST \
--url https://example.com/api/checkout \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test \
--data '{
"billing": {
"city": "Texas",
"country": "US",
"state": "Texas",
"street": "56, hhh",
"zipcode": "560000"
},
"customer": {
"email": "[email protected] ",
"name": "test"
},
"metadata": {},
"payment_link": true,
"product_id": "pdt_QMDuvLkbVzCRWRQjLNcs",
"quantity": 1,
"billing_currency": "USD",
"discount_code": "IKHZ23M9GQ",
"return_url": "https://example.com",
"trial_period_days": 10
}'
See all 27 lines
Checkout Session Curl example
curl --request POST \
--url https://example.com/api/checkout \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test \
--data '{
"product_cart": [
{
"product_id": "pdt_QMDuvLkbVzCRWRQjLNcs",
"quantity": 1
}
],
"customer": {
"email": "[email protected] ",
"name": "test"
},
"return_url": "https://example.com/success"
}'
See all 19 lines
このハンドラーを使用して、顧客がDodo Paymentsの顧客ポータルを通じてサブスクリプションや詳細を管理できるようにします。
// route.ts
import { Checkout } from '@dodopayments/hono' ;
import Hono from 'hono'
const app = new Hono ()
app . get (
"/api/customer-portal" ,
CustomerPortal ({
bearerToken: process . env . DODO_PAYMENTS_API_KEY ,
environment: process . env . DODO_PAYMENTS_ENVIRONMENT
})
);
See all 12 lines
Customer Portal Curl example
curl --request GET \
--url 'https://example.com/api/customer-portal?customer_id=cus_9VuW4K7O3GHwasENg31m&send_email=true' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test
See all 5 lines
このハンドラーを使用して、Dodo PaymentsのWebhookイベントをHonoアプリで安全に受信して処理します。
// route.ts
import Hono from 'hono'
import { Webhooks } from '@dodopayments/hono'
const app = new Hono ()
app . post (
"/api/webhooks" ,
Webhooks ({
webhookKey: process . env . DODO_PAYMENTS_WEBHOOK_KEY ,
onPayload : async ( payload ) => {
// Handle Payload Here
console . log ( payload )
}
})
);
See all 16 lines
チェックアウトルートハンドラー
Dodo Paymentsは、ウェブサイトに支払いを統合するための3種類の支払いフローをサポートしており、このアダプタはすべてのタイプの支払いフローをサポートしています。
静的支払いリンク: 迅速でコード不要の支払い収集のための即時共有可能なURL。
動的支払いリンク: APIまたはSDKを使用してカスタム詳細を持つ支払いリンクをプログラム的に生成します。
チェックアウトセッション: 事前に設定された製品カートと顧客詳細を持つ安全でカスタマイズ可能なチェックアウト体験を作成します。
サポートされているクエリパラメータ 製品識別子(例: ?productId=pdt_nZuwz45WAs64n3l07zpQR)。
支払い金額を指定します(例: 1000は$10.00を意味します)。
metadata_で始まる任意のクエリパラメータはメタデータとして渡されます。
productIdが欠けている場合、ハンドラーは400レスポンスを返します。無効なクエリパラメータも400レスポンスを返します。
レスポンス形式 静的チェックアウトは、チェックアウトURLを含むJSONレスポンスを返します: {
"checkout_url" : "https://checkout.dodopayments.com/..."
}
パラメータをPOSTリクエストのJSONボディとして送信します。
一回限りの支払いと定期的な支払いの両方をサポートします。
サポートされているPOSTボディフィールドの完全なリストについては、次を参照してください:
レスポンス形式 動的チェックアウトは、チェックアウトURLを含むJSONレスポンスを返します: {
"checkout_url" : "https://checkout.dodopayments.com/..."
}
チェックアウトセッションは、より安全でホストされたチェックアウト体験を提供し、一回限りの購入とサブスクリプションの完全な支払いフローを処理します。 詳細とサポートされているフィールドの完全なリストについては、チェックアウトセッション統合ガイド を参照してください。 レスポンス形式 チェックアウトセッションは、チェックアウトURLを含むJSONレスポンスを返します: {
"checkout_url" : "https://checkout.dodopayments.com/session/..."
}
顧客ポータルルートハンドラー
顧客ポータルルートハンドラーを使用すると、Dodo Paymentsの顧客ポータルをHonoアプリケーションにシームレスに統合できます。
クエリパラメータ
ポータルセッションの顧客ID(例: ?customer_id=cus_123)。
trueに設定すると、顧客にポータルリンクを含むメールが送信されます。
customer_idが欠けている場合、400を返します。
Webhookルートハンドラー
メソッド: POSTリクエストのみがサポートされています。他のメソッドは405を返します。
署名検証: webhookKeyを使用してWebhook署名を検証します。検証に失敗した場合は401を返します。
ペイロード検証: Zodで検証されます。無効なペイロードには400を返します。
エラーハンドリング:
401: 無効な署名
400: 無効なペイロード
500: 検証中の内部エラー
イベントルーティング: ペイロードタイプに基づいて適切なイベントハンドラーを呼び出します。
サポートされているWebhookイベントハンドラー
onPayload ?: ( payload : WebhookPayload ) => Promise < void > ;
onPaymentSucceeded ?: ( payload : WebhookPayload ) => Promise < void > ;
onPaymentFailed ?: ( payload : WebhookPayload ) => Promise < void > ;
onPaymentProcessing ?: ( payload : WebhookPayload ) => Promise < void > ;
onPaymentCancelled ?: ( payload : WebhookPayload ) => Promise < void > ;
onRefundSucceeded ?: ( payload : WebhookPayload ) => Promise < void > ;
onRefundFailed ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeOpened ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeExpired ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeAccepted ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeCancelled ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeChallenged ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeWon ?: ( payload : WebhookPayload ) => Promise < void > ;
onDisputeLost ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionActive ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionOnHold ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionRenewed ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionPlanChanged ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionCancelled ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionFailed ?: ( payload : WebhookPayload ) => Promise < void > ;
onSubscriptionExpired ?: ( payload : WebhookPayload ) => Promise < void > ;
onLicenseKeyCreated ?: ( payload : WebhookPayload ) => Promise < void > ;
See all 22 lines
LLMへのプロンプト
あなたはHono開発者アシスタントの専門家です。あなたのタスクは、ユーザーが既存のHonoプロジェクトに@dodopayments/honoアダプタを統合する手順を案内することです。
@dodopayments/honoアダプタは、Dodo Paymentsのチェックアウト、顧客ポータル、およびWebhook機能のためのルートハンドラーを提供し、Honoアプリに直接接続できるように設計されています。
まず、必要なパッケージをインストールします。ユーザーのプロジェクトに適したパッケージマネージャー(npm、yarn、またはbun)を使用してください:
npm install @dodopayments/hono
---
以下のように応答を構成してください:
1. ユーザーに統合したい機能を尋ねます。
"@dodopayments/honoアダプタのどの部分をプロジェクトに統合したいですか?次の中から1つ以上を選択できます:
- チェックアウトルートハンドラー(製品のチェックアウトを処理するため)
- 顧客ポータルルートハンドラー(顧客のサブスクリプション/詳細を管理するため)
- Webhookルートハンドラー(Dodo PaymentsのWebhookイベントを受信するため)
- すべて(3つすべてを統合)"
---
2. ユーザーの選択に基づいて、各選択した機能の詳細な統合手順を提供します。
---
**チェックアウトルートハンドラーが選択された場合:**
**目的**: このハンドラーは、ユーザーをDodo Paymentsのチェックアウトページにリダイレクトします。
**統合**:
Honoアプリに静的(GET)と動的(POST)チェックアウト用の2つのルートを作成します。
import { Checkout } from '@dodopayments/hono';
import Hono from 'hono'
const app = new Hono()
app.get(
"/api/checkout",
Checkout({
bearerToken: process.env.DODO_PAYMENTS_API_KEY,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
type: 'static'
})
);
app.post(
"/api/checkout",
Checkout({
bearerToken: process.env.DODO_PAYMENTS_API_KEY,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
type: 'session' // または動的リンクの場合は'dynamic'
})
);
設定オプション:
bearerToken: あなたのDodo Payments APIキー(DODO_PAYMENTS_API_KEY環境変数に保存することを推奨)。
returnUrl(オプション): チェックアウト成功後にユーザーをリダイレクトするURL。
environment: "test_mode"または"live_mode"
type: "static"(GET)または"dynamic"(POST)または"session"(POST)
GET(静的チェックアウト)はクエリパラメータを期待します:
productId(必須)
quantity、顧客フィールド(fullName、emailなど)、およびメタデータ(metadata_*)はオプションです。
POST(動的チェックアウト)は、支払い詳細(1回限りまたはサブスクリプション)を含むJSONボディを期待します。完全なPOSTスキーマについては、ドキュメントを参照してください:
一回限りの支払い: https://docs.dodopayments.com/api-reference/payments/post-payments
サブスクリプション: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions
POST(チェックアウトセッション) - (推奨)よりカスタマイズ可能なチェックアウト体験。チェックアウトURLを含むJSONを返します: パラメータはJSONボディとして送信されます。一回限りの支払いと定期的な支払いの両方をサポートします。返されるもの: {"checkout_url": "https://checkout.dodopayments.com/session/..."}。サポートされているフィールドの完全なリストについては、次を参照してください:
チェックアウトセッション統合ガイド: https://docs.dodopayments.com/developer-resources/checkout-session
顧客ポータルルートハンドラーが選択された場合:
目的: このルートは、顧客がDodo Paymentsポータルを通じてサブスクリプションを管理できるようにします。
統合:
import { Checkout } from '@dodopayments/hono';
import Hono from 'hono'
const app = new Hono()
app.get(
"/api/customer-portal",
CustomerPortal({
bearerToken: process.env.DODO_PAYMENTS_API_KEY,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT
})
);
クエリパラメータ:
customer_id(必須): 例: ?customer_id=cus_123
send_email(オプション): trueの場合、顧客にポータルリンクがメールされます。
customer_idが欠けている場合、400を返します。
Webhookルートハンドラーが選択された場合:
目的: Dodo Paymentsからの受信Webhookイベントを処理して、アプリ内のイベントをトリガーします。
統合:
import Hono from 'hono'
import { Webhooks } from '@dodopayments/hono'
const app = new Hono()
app.post(
"/api/webhooks",
Webhooks({
webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY,
onPayload: async (payload) => {
// ここでペイロードを処理します
console.log(payload)
}
})
);
機能:
POSTメソッドのみが許可されており、他は405を返します。
署名検証はwebhookKeyを使用して行われます。無効な場合は401を返します。
Zodベースのペイロード検証。無効なスキーマの場合は400を返します。
すべてのハンドラーは非同期関数です。
サポートされているWebhookイベントハンドラー:
次のいずれかのハンドラーを渡すことができます:
onPayload
onPaymentSucceeded
onPaymentFailed
onPaymentProcessing
onPaymentCancelled
onRefundSucceeded
onRefundFailed
onDisputeOpened, onDisputeExpired, onDisputeAccepted, onDisputeCancelled, onDisputeChallenged, onDisputeWon, onDisputeLost
onSubscriptionActive, onSubscriptionOnHold, onSubscriptionRenewed, onSubscriptionPaused, onSubscriptionPlanChanged, onSubscriptionCancelled, onSubscriptionFailed, onSubscriptionExpired
onLicenseKeyCreated
環境変数の設定:
プロジェクト内でこれらの環境変数を定義してください:
DODO_PAYMENTS_API_KEY=your-api-key
DODO_PAYMENTS_RETURN_URL=https://yourapp.com/success
DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secret
DODO_PAYMENTS_ENVIRONMENT="test_mode"または"live_mode""
これらをコード内で次のように使用します:
process.env.DODO_PAYMENTS_API_KEY
process.env.DODO_PAYMENTS_WEBHOOK_KEY
セキュリティノート: シークレットをバージョン管理にコミットしないでください。ローカルでは.envファイルを使用し、デプロイ環境ではシークレットマネージャーを使用してください(例: AWS、Vercel、Herokuなど)。