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でのみ使用できます。
主な機能
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をリダイレクトします。
Customerの管理
email addressとnameを指定してcustomerを作成し、IDで取得します。Metadataの値には、shared packageのunion typeを使用します。
Subscriptionの処理
subscriptionを作成し、on-demand subscriptionに課金し、subscriptionのusage historyを読み取ります。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に基づいて分岐し、特定のケースを処理します。
*net.OpErrorをラップした*url.Errorを受け取ることがあります。apiErr.DumpRequest(true)はserialized requestを返します。
Middleware
option.WithMiddlewareを使用してmiddlewareを追加します。middlewareは各リクエストと、そのリクエストを送信するnext functionを受け取ります。
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についてサポートが必要な場合:- Discord:community serverに参加して、リアルタイムでサポートを受けてください。
- Email:support@dodopayments.comまでお問い合わせください。
- GitHub:repositoryでissueを作成してください。