Skip to main content
Go SDKを使用すると、GoアプリケーションからDodo Payments REST APIに型付きでアクセスできます。すべてのメソッドはcontext.Contextを受け取り、リクエストパラメータでは、ゼロ値と省略されたフィールドを区別するFieldラッパーを使用します。また、すべてのリクエストにmiddlewareを追加できます。

インストール

モジュールをプロジェクトに追加します。
特定のバージョンに固定するには、次のようにします。
SDKにはGo 1.22以降が必要です。

クイックスタート

clientを作成し、その後checkout sessionを作成します。
option.WithBearerTokenを省略すると、NewClientは環境変数DODO_PAYMENTS_API_KEYを読み取ります。option.WithEnvironmentTestMode()を省略すると、clientはlive modeに接続します。test modeのAPI keyはtest modeでのみ使用できます。
API keyは環境変数またはsecrets managerで管理してください。ソースコードに直接記述しないでください。

主な機能

Context Support

すべてのメソッドは、キャンセルとタイムアウトに対応するcontext.Contextを受け取ります。

Strong Typing

コンパイル時チェックに対応した、型付きのリクエストパラメータとレスポンスstructを使用できます。

Middleware

ロギング、メトリクス、カスタムロジックのためにoption.WithMiddlewareでmiddlewareを追加できます。

Goroutine Safe

複数のgoroutineで1つのclientを共有できます。

設定

NewClientは、環境変数からDODO_PAYMENTS_API_KEY、DODO_PAYMENTS_WEBHOOK_KEY(webhook signing secret)、およびDODO_PAYMENTS_BASE_URLを読み取ります。option.WithBearerToken、option.WithWebhookKey、option.WithBaseURLなど、渡したオプションはこれらの値を上書きします。 webhookを検証するには、未加工のリクエストボディとheadersをclient.Webhooks.Unwrap(rawBody, r.Header)に渡します。webhook keyを使用してsignatureを確認し、解析済みのeventを返します。client.Webhooks.UnsafeUnwrap(rawBody)は検証せずにbodyを解析するため、テスト時にのみ使用してください。Webhooksを参照してください。 このページの例では、Quick Startのclientを使用しています。

Contextとタイムアウト

リクエストにはデフォルトでタイムアウトが設定されていません。contextのdeadlineは、リトライを含む呼び出し全体を制限します。各試行を制限するには、option.WithRequestTimeout()を追加します。

リトライ設定

SDKは、connection errorと、status 408、409、429、または500以上のresponseをリトライします。デフォルトでは、exponential backoffを使用して2回リトライします。clientまたは単一のリクエストにoption.WithMaxRetriesを設定します。

一般的な操作

このセクションの例でもcontextを使用します。たとえばctx := context.Background()です。

Checkout Sessionの作成

checkout sessionを作成し、返されたCheckoutURLにcustomerをリダイレクトします。
各checkout URLは1回だけ使用でき、24時間後に有効期限が切れます。すべてのsession optionについては、Checkout Sessionsを参照してください。

Customerの管理

email addressとnameを指定してcustomerを作成し、IDで取得します。Metadataの値には、shared packageのunion typeを使用します。

Subscriptionの処理

subscriptionを作成し、on-demand subscriptionに課金し、subscriptionのusage historyを読み取ります。
POST /subscriptions(SDKのSubscriptions.Newメソッド)は非推奨です。既存のintegrationでは引き続き動作しますが、新しいintegrationではCheckout Sessionを通じてsubscriptionを作成してください。
Billingに必要なのは、2文字のISO country codeであるCountryだけです。CustomerはCustomerRequestUnionParamです。既存のcustomerにはAttachExistingCustomerParam{CustomerID: ...}を渡し、新しく作成する場合はNewCustomerParam{Email: ..., Name: ...}を渡します。Chargeはon-demand subscriptions用で、ProductPriceは通貨の最小単位で指定します。GetUsageHistoryは結果の1ページを返し、GetUsageHistoryAutoPagingはすべてのページを反復処理します。

使用量ベースのBilling

Usage Eventの取り込み

customerのusage eventを送信します。
EventIDはidempotency keyなので、各eventに一意の値を指定してください。同じEventIDが1つのリクエスト内に2回現れると、リクエスト全体が拒否されます。EventIDがすでに取り込まれている場合、新しいeventは無視されます。1回のリクエストで最大1,000件のeventを受け付けます。Timestampのデフォルト値は現在時刻で、過去1時間より前、または未来5分より後の値は拒否されます。

Usage Eventの一覧表示

customerとevent nameでフィルタリングしたeventを一覧表示します。
Listは1ページを返します。すべてのページを反復処理するには、client.UsageEvents.ListAutoPaging(ctx, params)を呼び出し、iter.Next()、iter.Current()、iter.Err()を使ってループします。その他のlist methodにも同じAutoPaging variantがあり、各ページにはGetNextPage() methodがあります。

Error Handling

APIがsuccess以外のstatus codeを返すと、SDKは*dodopayments.Error型のerrorを返します。このerrorにはStatusCode、*http.Request、*http.Response、およびerror bodyのJSONが含まれます。errors.Asを使用して内容を確認し、StatusCodeに基づいて分岐し、特定のケースを処理します。
その他のerrorはラップされずに返されます。たとえば、HTTP transportが失敗した場合、*net.OpErrorをラップした*url.Errorを受け取ることがあります。apiErr.DumpRequest(true)はserialized requestを返します。

Middleware

option.WithMiddlewareを使用してmiddlewareを追加します。middlewareは各リクエストと、そのリクエストを送信するnext functionを受け取ります。
1回のoption.WithMiddleware呼び出しに複数のmiddlewareを指定すると、左から右の順に実行されます。NewClientに渡したmiddlewareは、単一のリクエストに渡したmiddlewareより前に実行されます。

Concurrency

clientはconcurrent useに対応しているため、複数のgoroutineで1つのclientを共有できます。

リソース

GitHub Repository

ソースコード、リリース、および完全なmethod list。

API Reference

すべてのendpoint、parameter、response。

Discord Community

質問したり、他のdeveloperと交流したりできます。

Report Issues

bugの報告やfeatureのリクエストを行えます。

サポート

Go SDKについてサポートが必要な場合:

Contributing

貢献するには、contributing guidelinesをお読みください。
最終更新日 2026年9月26日