Skip to main content
Rust SDK는 async Rust 애플리케이션에 Dodo Payments REST API에 대한 타입이 지정된 액세스를 제공합니다. Tokio와 reqwest를 기반으로 구축되었으며, 타입이 지정된 request 및 response struct를 사용하고, 페이지로 구분된 결과를 stream하며, 실패한 request를 retry합니다.

설치

SDK를 Cargo로 프로젝트에 추가하세요:
또는 수동으로 이를 Cargo.toml에 추가하세요:
SDK에는 Rust 1.75 이상이 필요합니다.

빠른 시작

Client::from_env()는 DODO_PAYMENTS_API_KEY 환경 변수에서 API key를 읽습니다. client를 생성한 다음 checkout session을 생성하세요:
DODO_PAYMENTS_API_KEY가 설정되지 않은 경우 Client::from_env()는 Error::Config를 반환합니다. Environments에 설명된 것처럼 다른 environment를 선택하지 않으면 client는 live mode에 연결됩니다. test mode API key는 test mode에서만 작동합니다.
API key는 environment variable 또는 secrets manager에 보관하세요. source code에 직접 hardcode하지 마세요.

핵심 기능

Async First

Tokio와 reqwest를 기반으로 구축되었으며, 모든 request에 async/await를 사용합니다.

Strong Typing

compile-time check를 위한 타입이 지정된 request 및 response struct입니다.

Auto-Pagination

모든 page의 항목을 stream하거나 한 번에 한 page씩 이동할 수 있습니다.

Configurable

각 client의 environment, base URL, timeout, retry count를 설정할 수 있습니다.

Configuration

Environment Variables

Client::from_env()는 DODO_PAYMENTS_API_KEY에서 API key를 읽습니다. DODO_PAYMENTS_BASE_URL를 설정하지 않으면 live mode URL을 사용합니다:
Rust SDK는 DODO_PAYMENTS_WEBHOOK_KEY를 읽지 않으며 webhook signature를 검증하는 method도 제공하지 않습니다. 이를 검증하려면 Webhooks를 따르세요. client를 명시적으로 구성할 수도 있습니다. Client::new는 Result를 반환하므로, dodopayments::Result를 반환하는 function 내부에서 ?로 unwrap하세요:

Environments

SDK에는 두 가지 environment가 있습니다: 기본 base URL은 https://live.dodopayments.com입니다. hard-coded URL 대신 Environment enum을 사용하여 다른 environment를 선택하세요:
from_env()를 사용하면서 DODO_PAYMENTS_API_KEY에서 API key를 계속 읽되 다른 environment를 대상으로 지정하려면 config에서 environment를 재정의하세요:

Timeouts

기본 request timeout은 30초입니다. with_timeout를 사용하여 client의 timeout을 재정의하세요:
client는 connection error와 status가 408, 409, 429 또는 500 이상인 response를 retry합니다. 기본적으로 exponential backoff를 사용하여 두 번 retry하며, API가 Retry-After header를 전송하면 해당 값을 기다립니다. retry count를 변경하려면 ClientConfig에서 with_max_retries를 호출하세요. 예를 들어 .with_max_retries(0)는 retry를 비활성화합니다.

일반적인 작업

이 section의 예제에서는 Quick Start의 client를 사용합니다.

Checkout Session 생성

return URL을 사용하여 checkout session을 생성하세요:
customer를 session.checkout_url로 redirect하세요. 각 checkout URL은 한 번만 작동하며 24시간 후 만료됩니다. 모든 session option은 Checkout Sessions를 참조하세요.

Customer 관리

email address와 name으로 customer를 생성한 다음 ID로 조회하세요:

Subscription 처리

기존 customer에 대한 subscription을 생성합니다.
POST /subscriptions(SDK의 subscriptions().create() method)는 deprecated입니다. 기존 integration에서는 계속 작동하지만, 새로운 integration에서는 Checkout Session을 통해 subscription을 생성해야 합니다.
billing에는 country만 필요하며, CountryCode::Us와 같은 CountryCode enum variant를 사용합니다. customer는 CustomerRequest enum입니다. 기존 customer에는 AttachExistingCustomer를 전달하고, 새 customer를 생성하려면 NewCustomer를 전달하세요. on-demand subscription에 요금을 청구하려면 SubscriptionsChargeParams body와 함께 client.subscriptions().charge().subscription_id(...)를 호출하세요. product_price와 같은 amount field는 통화의 가장 작은 단위로 표시됩니다(예: 2500는 $25.00).

사용량 기반 Billing

Usage Event 수집

customer에 대한 usage event를 전송하세요:
event_id는 idempotency key이므로 각 event에 고유한 값을 지정하세요. timestamp가 None이면 event는 현재 시간을 사용합니다.

Usage Event 나열

customer와 event name으로 filter링하여 event를 나열합니다. filter는 JSON query object에 입력합니다:

Pagination

List endpoint는 타입이 지정된 page를 반환하며, items field에 현재 page의 결과가 저장됩니다. 모든 page의 항목을 stream하려면 into_stream를 호출하세요:
한 번에 한 page씩 이동하려면 get_next_page를 호출하세요. 마지막 page 이후에는 None를 반환합니다:

Error Handling

모든 method는 dodopayments::Result<T>를 반환합니다. 실패는 dodopayments::Error enum의 variant입니다. Api는 API의 error status, Http는 transport error, Json는 serialization error, Config는 configuration error를 나타내며, MissingPathParam 또는 MissingBody는 불완전한 request를 나타냅니다. API error와 transport error를 별도로 처리하려면 이를 match하세요:

문서화되지 않은 Endpoint

타입이 지정된 method가 없는 endpoint를 호출하려면 low-level request builder를 사용하세요. 이 builder는 authentication과 base URL을 적용합니다. reqwest::Method의 이름을 지정하려면 dependency에 reqwest 0.12를 추가하세요:

리소스

GitHub Repository

source code, release 및 전체 method 목록입니다.

Crates.io

publish된 crate와 해당 version입니다.

API Reference

모든 endpoint, parameter 및 response입니다.

Discord Community

질문을 하고 다른 developer와 소통할 수 있습니다.

지원

Rust SDK에 대한 지원이 필요하면 다음을 이용하세요:

기여

기여하려면 contributing guidelines를 읽어보세요.
마지막 수정일 2026년 9월 26일