メインコンテンツへスキップ

インストール

1

パッケージをインストール

プロジェクトのルートで次のコマンドを実行します:
npm install @dodopayments/hono
2

環境変数を設定

プロジェクトのルートに.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""
.envファイルやシークレットをバージョン管理にコミットしないでください。

ルートハンドラーの例

すべての例は、Hono App Routerを使用していることを前提としています。
このハンドラーを使用して、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'
  })
  );
curl --request GET \
--url 'https://example.com/api/checkout?productId=pdt_fqJhl7pxKWiLhwQR042rh' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test
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
}'
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"
}'

チェックアウトルートハンドラー

Dodo Paymentsは、ウェブサイトに支払いを統合するための3種類の支払いフローをサポートしており、このアダプタはすべてのタイプの支払いフローをサポートしています。
  • 静的支払いリンク: 迅速でコード不要の支払い収集のための即時共有可能なURL。
  • 動的支払いリンク: APIまたはSDKを使用してカスタム詳細を持つ支払いリンクをプログラム的に生成します。
  • チェックアウトセッション: 事前に設定された製品カートと顧客詳細を持つ安全でカスタマイズ可能なチェックアウト体験を作成します。

サポートされているクエリパラメータ

productId
string
required
製品識別子(例: ?productId=pdt_nZuwz45WAs64n3l07zpQR)。
quantity
integer
製品の数量。
fullName
string
顧客のフルネーム。
firstName
string
顧客の名。
lastName
string
顧客の姓。
email
string
顧客のメールアドレス。
country
string
顧客の国。
addressLine
string
顧客の住所。
city
string
顧客の市。
state
string
顧客の州/県。
zipCode
string
顧客の郵便番号。
disableFullName
boolean
フルネームフィールドを無効にします。
disableFirstName
boolean
名フィールドを無効にします。
disableLastName
boolean
姓フィールドを無効にします。
disableEmail
boolean
メールフィールドを無効にします。
disableCountry
boolean
国フィールドを無効にします。
disableAddressLine
boolean
住所フィールドを無効にします。
disableCity
boolean
市フィールドを無効にします。
disableState
boolean
州フィールドを無効にします。
disableZipCode
boolean
郵便番号フィールドを無効にします。
paymentCurrency
string
支払い通貨を指定します(例: USD)。
showCurrencySelector
boolean
通貨セレクターを表示します。
paymentAmount
integer
支払い金額を指定します(例: 1000は$10.00を意味します)。
showDiscounts
boolean
割引フィールドを表示します。
metadata_*
string
metadata_で始まる任意のクエリパラメータはメタデータとして渡されます。
productIdが欠けている場合、ハンドラーは400レスポンスを返します。無効なクエリパラメータも400レスポンスを返します。

レスポンス形式

静的チェックアウトは、チェックアウトURLを含むJSONレスポンスを返します:
{
  "checkout_url": "https://checkout.dodopayments.com/..."
}

レスポンス形式

動的チェックアウトは、チェックアウトURLを含むJSONレスポンスを返します:
{
  "checkout_url": "https://checkout.dodopayments.com/..."
}
チェックアウトセッションは、より安全でホストされたチェックアウト体験を提供し、一回限りの購入とサブスクリプションの完全な支払いフローを処理します。詳細とサポートされているフィールドの完全なリストについては、チェックアウトセッション統合ガイドを参照してください。

レスポンス形式

チェックアウトセッションは、チェックアウトURLを含むJSONレスポンスを返します:
{
  "checkout_url": "https://checkout.dodopayments.com/session/..."
}

顧客ポータルルートハンドラー

顧客ポータルルートハンドラーを使用すると、Dodo Paymentsの顧客ポータルをHonoアプリケーションにシームレスに統合できます。

クエリパラメータ

customer_id
string
required
ポータルセッションの顧客ID(例: ?customer_id=cus_123)。
send_email
boolean
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>;

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など)。