Sequence để lặp qua các kết quả và suspend function cho các lệnh gọi bất đồng bộ.
Cài đặt
Gradle (Kotlin DSL)
Thêm phụ thuộc vàobuild.gradle.kts:
build.gradle.kts
Maven
Thêm phụ thuộc vàopom.xml:
pom.xml
SDK yêu cầu Java 8 trở lên. SDK chạy trên JVM và Android, đồng thời đi kèm các quy tắc keep cho ProGuard và R8.
Bắt đầu nhanh
Tạo client, sau đó tạo checkout session: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, xem Test Mode. API key của test mode chỉ hoạt động trong test mode.
Tính năng chính
Coroutines
Các method của async client là
suspend function mà bạn gọi từ một coroutine.Null Safety
Các field có thể bị thiếu là nullable type, không phải
Optional.Sequences
Trên synchronous client,
autoPager() trả về một Sequence để tải thêm các page khi bạn lặp qua kết quả. Trên async client, method này trả về một Flow.Immutable Models
Các model class là immutable, và
toBuilder() trả về một builder cho bản sao đã được sửa đổi.Cấu hình
Từ Environment Variable
fromEnv() đọc các setting của bạn từ environment variable hoặc system property. System property được ưu tiên:
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 thực webhook, truyền raw request body và header 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 signature bằng webhook key của bạn và trả về event đã được parse, hoặc throw DodoPaymentsWebhookException. Nếu không có header, unwrap sẽ không xác minh signature. client.webhooks().unsafeUnwrap(rawBody) parse 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 option trên builder:Test Mode
Để sử dụng test mode (https://test.dodopayments.com), hãy gọi testMode() trên builder:
Timeout và Retry
Theo mặc định, client retry hai lần và timeout sau 1 phút. Client retry các lỗi kết nối và response có status 408, 409, 429 hoặc 500 trở lên, với exponential backoff. Thiết lập giá trị mặc định trên client hoặc truyềnRequestOptions vào một call riêng lẻ:
Các thao tác phổ biến
Các ví dụ trong phần này sử dụngclient từ Quick Start.
Tạo Checkout Session
Tạo checkout session, sau đó redirect customer đến checkout URL được trả về:checkoutUrl() trả về một String? nullable. Mỗi checkout URL chỉ hoạt động một lần và hết hạn sau 24 giờ. Để xem mọi option của session, hãy xem Checkout Sessions.
Tạo Product
Tạo một product subscription hàng tháng có giá $29.99:price sử dụng đơn vị nhỏ nhất của currency. discountBps thiết lập discount theo basis point và thay thế field discount đã deprecated.
Kích hoạt License Key
Kích hoạt license key cho một device hoặc installation. Nếu key đã đạt giới hạn kích hoạt, API trả về422 và SDK throw UnprocessableEntityException. Key chưa được kích hoạt trả về 403 (PermissionDeniedException), còn key không xác định trả về 404 (NotFoundException):
Xử lý Subscription
Tạo subscription, sau đó charge subscription nếu đây là on-demand subscription.billing chỉ yêu cầu country, là mã quốc gia ISO gồm hai chữ cái. Sử dụng AttachExistingCustomer để gắn customer hiện có hoặc NewCustomer để tạo customer. charge dành cho on-demand subscriptions, còn productPrice sử dụng đơn vị nhỏ nhất của currency.Tính phí dựa trên Usage
Ghi nhận Usage Event
Gửi usage event cho một customer. Các meter theo dõieventName của event sẽ aggregate event đó:
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 request chấp nhận tối đa 1.000 event.
Thao tác bất đồng bộ
Async Client
Async client có các method giống synchronous client, nhưng hầu hết làsuspend function. Gọi các method này từ một coroutine:
client.async() trên synchronous client để lấy phiên bản async của client đó.
Xử lý lỗi
Với error status, SDK throw một subclass củaDodoPaymentsServiceException, chứa statusCode(), headers() và body(). Các subclass gồm BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx) và UnexpectedStatusCodeException cho các status khác, chẳng hạn 409:
DodoPaymentsIoException, còn response mà SDK không thể diễn giải sẽ throw DodoPaymentsInvalidDataException. Tất cả exception của SDK đều extend DodoPaymentsException.
Xử lý lỗi theo chức năng
Sử dụngResult để xử lý lỗi theo chức năng:
Tích hợp Android
Kotlin SDK là một server SDK. SDK xác thực bằng secret API key của bạn, và bất kỳ ai có APK của bạn đều có thể trích xuất key được biên dịch bên trong đó, vì vậy không bao giờ sử dụng SDK này bên trong ứng dụng Android. Để thực hiện thanh toán trong ứng dụng Android:- Trên server, tạo checkout session bằng SDK này (xem Tích hợp Ktor) và trả về
checkout_url. - Trong ứng dụng, lấy
checkout_urltừ server của bạn và mở bằng Android SDK, SDK này không chứa API key.
Xác thực Response
Theo mặc định, SDK chỉ némDodoPaymentsInvalidDataException khi bạn đọc một property có type không như mong đợi. Để kiểm tra toàn bộ response trước, hãy bật validation cho một request hoặc gọi validate() trên response:
Tính năng nâng cao
Cấu hình Proxy
Để gửi request thông qua proxy, hãy truyền mộtjava.net.Proxy vào builder:
Cấu hình tạm thời
withOptions trả về một client với các cài đặt đã thay đổi, dùng chung connection pool và thread pool của client ban đầu. Client ban đầu không thay đổi:
Tích hợp Ktor
Tạo client một lần và gọi nó từ một route:Tài nguyên
GitHub Repository
Mã nguồn, các bản phát hành và danh sách đầy đủ các method.
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 trợ giúp về Kotlin SDK:- Discord: Tham gia community server để nhận trợ giúp theo thời gian thực.
- Email: Liên hệ support@dodopayments.com.
- GitHub: Mở issue trên repository.