メインコンテンツへスキップ
Rust SDKは、Rustで書かれたアプリケーションからDodo Payments REST APIへの便利な非同期優先のアクセスを提供します。強く型付けされたリクエストとレスポンス、組み込みのページネーションヘルパー、構成可能なタイムアウトと環境を提供します。

インストール

Cargoを使ってSDKをプロジェクトに追加します:
cargo add dodopayments
または、手動で追加します:
[dependencies]
dodopayments = "1.106.0"
tokio = { version = "1", features = ["full"] }
serde_json = "1"
futures = "0.3" # required for streaming paginated results
SDKはRust 1.75以降を必要とし、最適なパフォーマンスのために最新の非同期機能を活用します。

クイックスタート

クライアントはデフォルトでAPIキーを環境変数から読み込みます。クライアントを初期化し、最初のチェックアウトセッションを作成します:
use dodopayments::Client;

#[tokio::main]
async fn main() -> dodopayments::Result<()> {
    let client = Client::from_env()?;

    let result = client
        .checkout_sessions()
        .create()
        .body(dodopayments::models::CheckoutSessionsCreateParams {
            product_cart: Some(vec![dodopayments::models::ProductItemReq {
                product_id: "product_id".to_string(),
                quantity: 1,
                addons: None,
                amount: None,
                credit_entitlements: None,
            }]),
            ..Default::default()
        })
        .await?;

    println!("{result:?}");
    Ok(())
}
APIキーは常に環境変数を使用して安全に保存してください。ソースコードにハードコードしないでください。

コア機能

Tokioとreqwestに基づき、サポートを提供します。 コンパイル時の安全性のための強く型付けされたリクエストとレスポンス すべてのアイテムをページ全体でストリームするか、1ページずつ進む クライアントごとに環境、タイムアウト、ベースURLを構成可能

構成

環境変数

デフォルトでは、APIキーを環境変数から読み込み、デフォルトのベースURLを使用します。
export DODO_PAYMENTS_API_KEY="your_api_key"
export DODO_PAYMENTS_BASE_URL="https://test.dodopayments.com" # optional
クライアントを明示的に構成することもできます。関数内でこれをアンラップしてください。
use dodopayments::{Client, ClientConfig};

#[tokio::main]
async fn main() -> dodopayments::Result<()> {
    let client = Client::new(
        ClientConfig::new("https://live.dodopayments.com").with_api_key("My API Key"),
    )?;
    println!("{}", client.base_url());
    Ok(())
}

環境

NameBase URL
デフォルトhttps://api.example.com
ステージングhttps://staging.example.com
デフォルトのベースURLはhttps://api.example.comです。URLをハードコーディングせずに別の環境を選択してください:
use dodopayments::{Client, ClientConfig, Environment};

let client = Client::new(
    ClientConfig::from_environment(Environment::TestMode).with_api_key("My API Key"),
)?;
デフォルトでない環境をターゲットにしながら、APIキーを環境変数から読み続けるには、構成で上書きします:
use dodopayments::{Client, ClientConfig, Environment};

let client = Client::new(ClientConfig::from_env()?.with_environment(Environment::TestMode))?;

タイムアウト

デフォルトのリクエストタイムアウトは30秒です。クライアントごとに上書きします:
use std::time::Duration;
use dodopayments::{Client, ClientConfig};

let client = Client::new(
    ClientConfig::new("https://live.dodopayments.com")
        .with_api_key("My API Key")
        .with_timeout(Duration::from_secs(60)),
)?;

共通操作

チェックアウトセッションを作成

チェックアウトセッションを生成します:
let session = client
    .checkout_sessions()
    .create()
    .body(dodopayments::models::CheckoutSessionsCreateParams {
        product_cart: Some(vec![dodopayments::models::ProductItemReq {
            product_id: "prod_123".to_string(),
            quantity: 1,
            addons: None,
            amount: None,
            credit_entitlements: None,
        }]),
        return_url: Some("https://yourdomain.com/return".to_string()),
        ..Default::default()
    })
    .await?;

println!("{session:?}");

顧客管理

顧客情報を作成および取得します:
// Create a customer
let customer = client
    .customers()
    .create()
    .body(dodopayments::models::CustomerCreateParams {
        email: "customer@example.com".to_string(),
        name: "John Doe".to_string(),
        ..Default::default()
    })
    .await?;

// Retrieve a customer
let customer = client
    .customers()
    .retrieve("cus_123")
    .await?;

println!("{customer:?}");

サブスクリプション処理

定期的なサブスクリプションを作成および管理します:
let subscription = client
    .subscriptions()
    .create()
    .body(dodopayments::models::SubscriptionCreateParams {
        billing: dodopayments::models::BillingAddress {
            country: "US".to_string(),
            city: "San Francisco".to_string(),
            state: "CA".to_string(),
            street: "1 Market St".to_string(),
            zipcode: "94105".to_string(),
        },
        customer: dodopayments::models::CustomerRequest::AttachExisting(
            dodopayments::models::AttachExistingCustomer {
                customer_id: "cus_123".to_string(),
            },
        ),
        product_id: "pdt_456".to_string(),
        quantity: 1,
        ..Default::default()
    })
    .await?;

println!("{subscription:?}");
最低でも2文字のISOコードが必要です。既存の顧客には指定を、新しい顧客には指定を渡してください。金額フィールドは通貨の最小単位で表されます(例:$25.00 USD)。

使用量ベースの請求

使用量イベントの取り込み

カスタムイベントを追跡します:
let response = client
    .usage_events()
    .ingest()
    .body(dodopayments::models::UsageEventsIngestParams {
        events: vec![dodopayments::models::EventInput {
            event_id: "api_call_12345".to_string(),
            customer_id: "cus_abc123".to_string(),
            event_name: "api_request".to_string(),
            ..Default::default()
        }],
    })
    .await?;

println!("{response:?}");

使用量イベントの一覧

let events = client
    .usage_events()
    .list()
    .query(serde_json::json!({
        "customer_id": "cus_abc123",
        "event_name": "api_request",
    }))
    .await?;

for event in &events.items {
    println!("{event:?}");
}

ページネーション

リストエンドポイントは、現在のページの結果を保持する型付けされたページを返します。すべてのページにわたって各アイテムをストリームします:
use futures::StreamExt;

let mut items = Box::pin(
    client
        .payments()
        .list()
        .query(serde_json::json!({}))
        .await?
        .into_stream(),
);

while let Some(item) = items.next().await {
    let item = item?;
    println!("{item:?}");
}
または、1ページずつ進むことができます:
let mut page = client
    .payments()
    .list()
    .query(serde_json::json!({}))
    .await?;

loop {
    for item in &page.items {
        println!("{item:?}");
    }
    match page.get_next_page().await? {
        Some(next) => page = next,
        None => break,
    }
}

エラーハンドリング

各メソッドは失敗を表す列挙型を返します。APIエラーをトランスポートエラーと区別して処理するためにマッチングします:
let result = client
    .checkout_sessions()
    .create()
    .body(dodopayments::models::CheckoutSessionsCreateParams {
        product_cart: Some(vec![dodopayments::models::ProductItemReq {
            product_id: "product_id".to_string(),
            quantity: 1,
            addons: None,
            amount: None,
            credit_entitlements: None,
        }]),
        ..Default::default()
    })
    .await;

match result {
    Ok(value) => println!("{value:?}"),
    Err(dodopayments::Error::Api { status, message }) => {
        eprintln!("API returned {status}: {message}");
    }
    Err(err) => eprintln!("request failed: {err}"),
}

未公開エンドポイント

まだ公開されていないエンドポイントを呼び出すには、認証とベースURLを適用するロー レベルのビルダーを使用します:
let response = client
    .request(reqwest::Method::GET, "/some/path")
    .send()
    .await?;

リソース

ソースコードを表示および貢献 公開済みのcrateとバージョンを表示 完全なAPIドキュメント ヘルプを得て開発者と接続する

サポート

Rust SDKのサポートが必要ですか?

貢献

貢献を歓迎します!が開始するために貢献ガイドラインを確認してください。
最終更新日 2026年6月26日