Skip to main content
Java SDK cung cấp cho các ứng dụng Java quyền truy cập có kiểu đến REST API của Dodo Payments. SDK sử dụng các kiểu Java xuyên suốt: Optional cho các trường có thể bị thiếu, Stream để lặp qua các kết quả và CompletableFuture cho các lệnh gọi bất đồng bộ.

Cài đặt

Maven

Thêm phần phụ thuộc vào pom.xml:
pom.xml

Gradle

Thêm dependency vào build.gradle.kts của bạn:
build.gradle.kts
Các bản phát hành SDK bổ sung hỗ trợ cho những thay đổi của API. Để tìm phiên bản mới nhất, hãy kiểm tra Maven Central.
SDK yêu cầu Java 8 trở lên, vì vậy cũng chạy được trên Java 11, 17 và 21.

Bắt đầu nhanh

Tạo một client, sau đó tạo một phiên checkout:
fromEnv() kết nối với live mode trừ khi DODO_PAYMENTS_BASE_URL hoặc dodopayments.baseUrl chỉ định khác. Để sử dụng test mode, hãy xem Test Mode. API key của test mode chỉ hoạt động trong test mode.
Lưu API key trong biến môi trường, system properties hoặc secrets manager. Không bao giờ hardcode chúng trong source code.

Tính năng cốt lõi

Type Safety

Các class request và response có kiểu để kiểm tra tại thời điểm biên dịch.

Shared Client

Tạo một client và tái sử dụng client đó cho các request: client quản lý connection pool và thread pool. Các object request và response là bất biến.

Builder Pattern

Mỗi class request đều có một builder, và toBuilder() tạo một bản sao đã chỉnh sửa.

Async Support

client.async() trả về một client có các method trả về CompletableFuture.

Cấu hình

Biến môi trường

fromEnv() đọc các biến môi trường này hoặc system properties tương ứng. System properties được ưu tiên:
.env
API key được lấy từ DODO_PAYMENTS_API_KEY hoặc dodopayments.apiKey. Webhook signing secret được lấy từ DODO_PAYMENTS_WEBHOOK_KEY hoặc dodopayments.webhookKey, còn base URL được lấy từ DODO_PAYMENTS_BASE_URL hoặc dodopayments.baseUrl. Hãy tạo một client và tái sử dụng client đó, vì mỗi client có connection pool và thread pool riêng. Để xác minh một webhook, truyền raw request body và headers vào client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), trong đó headers là một com.dodopayments.api.core.http.Headers. Method này kiểm tra chữ ký bằng webhook key của bạn và trả về event đã được phân tích, hoặc ném ra DodoPaymentsWebhookException. Nếu không có headers, unwrap sẽ không xác minh chữ ký. client.webhooks().unsafeUnwrap(rawBody) phân tích body mà không xác minh, vì vậy chỉ sử dụng method này để testing. Xem Webhooks.

Cấu hình thủ công

Thiết lập từng tùy chọn trên builder:
Theo mặc định, client thử lại hai lần và timeout sau 1 phút. Client thử lại khi xảy ra lỗi kết nối và khi nhận được response có status 408, 409, 429 hoặc 500 trở lên. Để ghi đè timeout cho một lần gọi, truyền RequestOptions.builder().timeout(Duration.ofSeconds(30)).build() làm đối số thứ hai của method. responseValidation(true) kiểm tra trước rằng toàn bộ response khớp với các kiểu dự kiến. Nếu không có tùy chọn này, SDK chỉ ném DodoPaymentsInvalidDataException khi bạn đọc một property có kiểu không mong đợi.

Test Mode

Để sử dụng test mode (https://test.dodopayments.com), hãy gọi testMode() trên builder:

Các thao tác phổ biến

Các ví dụ trong phần này sử dụng client từ Quick Start.

Tạo phiên Checkout

Tạo một phiên checkout, sau đó chuyển hướng khách hàng đến checkout URL được trả về:
checkoutUrl() trả về một Optional<String>. Mỗi checkout URL chỉ sử dụng được một lần và hết hạn sau 24 giờ. Để xem mọi tùy chọn của phiên, hãy xem Checkout Sessions.

Quản lý khách hàng

Tạo một khách hàng với email, tên và metadata, sau đó truy xuất khách hàng bằng ID:

Xử lý gói đăng ký

Tạo một gói đăng ký với payment link, sau đó charge gói này nếu đó là gói đăng ký on-demand.
POST /subscriptions (method subscriptions().create() của SDK) đã lỗi thời. Method này vẫn hoạt động với các integration hiện có, nhưng integration mới nên tạo gói đăng ký thông qua một Checkout Session.
productPrice được tính theo đơn vị tiền tệ nhỏ nhất, chẳng hạn như cents đối với USD hoặc paise đối với INR. Để charge $25.00, hãy truyền 2500.
subscriptions().charge(...) dành cho on-demand subscriptions. Dodo Payments tự động lập hóa đơn cho các gói đăng ký khác theo lịch thanh toán của sản phẩm.

Tính phí dựa trên mức sử dụng

Cấu hình meter

Tạo một meter để đếm các event, sau đó liệt kê các meter của bạn. autoPager() lặp qua mọi meter và tìm nạp thêm các trang khi cần:

Nạp event sử dụng

Gửi một event sử dụng cho khách hàng. Các giá trị metadata của event là các object JsonValue:
eventId là idempotency key, vì vậy hãy cung cấp một giá trị duy nhất cho mỗi event. Một timestamp cách thời điểm hiện tại hơn 1 giờ về trước hoặc hơn 5 phút trong tương lai sẽ bị từ chối.

Nạp event theo lô

Gửi tối đa 1.000 event trong một request. Ví dụ này sử dụng các import từ ví dụ trước:

Xử lý lỗi

SDK ném ra các unchecked exception. Khi có error status, SDK ném ra một subclass của DodoPaymentsServiceException, trong đó có statusCode(), headers() và body(). Hãy catch các class cụ thể mà bạn muốn xử lý trước base class:
Các status không có class riêng, chẳng hạn 409, sẽ ném UnexpectedStatusCodeException. Lỗi mạng sẽ ném DodoPaymentsIoException, còn các response mà SDK không thể diễn giải sẽ ném DodoPaymentsInvalidDataException. Tất cả các class này đều mở rộng DodoPaymentsException.
SDK thử lại các lỗi kết nối và response có status 408, 409, 429 hoặc 500 trở lên, mặc định hai lần, với exponential backoff.

Các thao tác bất đồng bộ

Gọi async() trên client để lấy một client bất đồng bộ. Các method của client này trả về một CompletableFuture:
Để tạo client bất đồng bộ ngay từ đầu, hãy sử dụng DodoPaymentsOkHttpClientAsync.fromEnv().

Tích hợp Spring Boot

Class cấu hình

Đăng ký một client dưới dạng bean và chọn environment từ một property:

Service layer

Inject client vào một service:

Tài nguyên

GitHub Repository

Source code, các bản phát hành và danh sách method đầy đủ.

API Reference

Mọi endpoint, parameter và response.

Discord Community

Đặt câu hỏi và trao đổi với các developer khác.

Report Issues

Báo cáo bug hoặc yêu cầu tính năng.

Hỗ trợ

Để được hỗ trợ về Java SDK:

Đóng góp

Để đóng góp, hãy đọc hướng dẫn đóng góp.
Lần sửa đổi cuối 26 tháng 9, 2026