Skip to main content
Kotlin SDK menyediakan akses bertipe ke REST API Dodo Payments untuk aplikasi Kotlin. SDK ini menggunakan Kotlin types secara menyeluruh: nilai nullable untuk field yang dapat tidak tersedia, Sequence untuk melakukan iterasi pada hasil, dan suspend functions untuk pemanggilan asynchronous.

Instalasi

Gradle (Kotlin DSL)

Tambahkan dependensi ke build.gradle.kts Anda:
build.gradle.kts

Maven

Tambahkan dependensi ke pom.xml Anda:
pom.xml
Rilis SDK menambahkan dukungan untuk perubahan API. Untuk menemukan versi terbaru, lihat Maven Central.
SDK memerlukan Java 8 atau yang lebih baru. SDK berjalan di JVM dan Android, serta menyertakan aturan keep untuk ProGuard dan R8.

Mulai Cepat

Buat client, lalu buat checkout session:
fromEnv() terhubung ke live mode kecuali DODO_PAYMENTS_BASE_URL atau dodopayments.baseUrl menentukan sebaliknya. Untuk menggunakan test mode, lihat Test Mode. API key test mode hanya berfungsi dalam test mode.
Simpan API keys dalam environment variables atau secrets manager. Jangan pernah commit API keys ke version control.

Fitur Inti

Coroutines

Method pada async client adalah suspend functions yang Anda panggil dari coroutine.

Null Safety

Field yang dapat tidak tersedia adalah nullable types, bukan Optional.

Sequences

Pada synchronous client, autoPager() mengembalikan Sequence yang mengambil halaman berikutnya saat Anda melakukan iterasi. Pada async client, method tersebut mengembalikan Flow.

Immutable Models

Model classes bersifat immutable, dan toBuilder() mengembalikan builder untuk salinan yang telah dimodifikasi.

Konfigurasi

Dari Environment Variables

fromEnv() membaca pengaturan Anda dari environment variables atau system properties. System properties memiliki prioritas:
API key berasal dari DODO_PAYMENTS_API_KEY atau dodopayments.apiKey. Webhook signing secret berasal dari DODO_PAYMENTS_WEBHOOK_KEY atau dodopayments.webhookKey, dan base URL berasal dari DODO_PAYMENTS_BASE_URL atau dodopayments.baseUrl. Buat satu client dan gunakan kembali, karena setiap client memiliki connection pool dan thread pools sendiri. Untuk memverifikasi webhook, teruskan raw request body dan headers ke client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), dengan headers sebagai com.dodopayments.api.core.http.Headers. Method tersebut memeriksa signature menggunakan webhook key Anda dan mengembalikan event yang telah diuraikan, atau melempar DodoPaymentsWebhookException. Tanpa headers, unwrap tidak memverifikasi signature. client.webhooks().unsafeUnwrap(rawBody) menguraikan body tanpa memverifikasinya, jadi gunakan hanya untuk testing. Lihat Webhooks.

Konfigurasi Manual

Atur setiap opsi pada builder:

Test Mode

Untuk menggunakan test mode (https://test.dodopayments.com), panggil testMode() pada builder:

Timeout dan Retry

Secara default, client melakukan retry dua kali dan mengalami timeout setelah 1 menit. Client melakukan retry untuk connection errors dan responses dengan status 408, 409, 429, atau 500 ke atas, menggunakan exponential backoff. Atur default pada client, atau teruskan RequestOptions ke satu call:

Operasi Umum

Contoh dalam bagian ini menggunakan client dari Quick Start.

Membuat Checkout Session

Buat checkout session, lalu arahkan customer ke checkout URL yang dikembalikan:
checkoutUrl() mengembalikan nullable String?. Setiap checkout URL hanya dapat digunakan sekali dan kedaluwarsa setelah 24 jam. Untuk setiap opsi session, lihat Checkout Sessions.

Membuat Produk

Buat produk subscription bulanan dengan harga $29.99:
price menggunakan unit mata uang terkecil. discountBps menetapkan diskon dalam basis points dan menggantikan field discount yang sudah deprecated.

Mengaktifkan License Key

Aktifkan license key untuk device atau installation. Jika key telah mencapai batas aktivasinya, API mengembalikan 422 dan SDK melempar UnprocessableEntityException. Key yang inactive mengembalikan 403 (PermissionDeniedException), sedangkan key yang tidak dikenal mengembalikan 404 (NotFoundException):

Menangani Subscription

Buat subscription, lalu charge subscription tersebut jika merupakan on-demand subscription.
POST /subscriptions (method subscriptions().create() milik SDK) deprecated. Method tersebut masih berfungsi untuk integrasi yang sudah ada, tetapi integrasi baru harus membuat subscription melalui Checkout Session.
billing hanya memerlukan country, yaitu kode negara ISO dua huruf. Gunakan AttachExistingCustomer untuk menghubungkan customer yang sudah ada, atau NewCustomer untuk membuat customer. charge digunakan untuk on-demand subscriptions, dan productPrice menggunakan unit mata uang terkecil.

Billing Berbasis Usage

Mencatat Usage Events

Kirim usage event untuk customer. Meter yang melacak eventName pada event akan mengagregasikannya:
eventId adalah idempotency key, jadi berikan nilai unik untuk setiap event. Satu request dapat menerima hingga 1.000 event.

Operasi Async

Async Client

Async client memiliki method yang sama seperti synchronous client, tetapi sebagian besar method tersebut adalah suspend functions. Panggil method tersebut dari coroutine:
Anda juga dapat memanggil client.async() pada synchronous client untuk mendapatkan versi async-nya.

Penanganan Error

Untuk status error, SDK melempar subclass dari DodoPaymentsServiceException, yang memiliki statusCode(), headers(), dan body(). Subclass tersebut adalah BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx), dan UnexpectedStatusCodeException untuk status lain, seperti 409:
Network failures melempar DodoPaymentsIoException, sedangkan responses yang tidak dapat diinterpretasikan SDK melempar DodoPaymentsInvalidDataException. Semua SDK exceptions merupakan turunan dari DodoPaymentsException.

Penanganan Error Fungsional

Gunakan Result untuk penanganan error fungsional:
runCatching menangkap setiap exception, termasuk SDK exceptions, dan mengembalikannya sebagai Result yang gagal.

Integrasi Android

Kotlin SDK adalah server SDK. SDK ini melakukan autentikasi dengan secret API key Anda, dan siapa pun yang memiliki APK Anda dapat mengekstrak key yang dikompilasi ke dalamnya, jadi jangan pernah menggunakannya di dalam aplikasi Android. Untuk menerima pembayaran di aplikasi Android:
  1. Di server Anda, buat checkout session dengan SDK ini (lihat Ktor Integration) dan kembalikan checkout_url.
  2. Di aplikasi, ambil checkout_url dari server Anda dan buka dengan Android SDK, yang tidak menyimpan API key.

Validasi Response

Secara default, SDK hanya melempar DodoPaymentsInvalidDataException saat Anda membaca properti dengan tipe yang tidak terduga. Untuk memeriksa seluruh response terlebih dahulu, aktifkan validasi untuk suatu request, atau panggil validate() pada response:

Fitur Lanjutan

Konfigurasi Proxy

Untuk mengirim request melalui proxy, teruskan java.net.Proxy ke builder:

Konfigurasi Sementara

withOptions mengembalikan client dengan pengaturan yang telah diubah dan berbagi connection serta thread pool milik client asli. Client asli tidak berubah:

Integrasi Ktor

Buat client sekali, lalu panggil dari sebuah route:

Resources

GitHub Repository

Kode sumber, rilis, dan daftar metode lengkap.

API Reference

Setiap endpoint, parameter, dan response.

Discord Community

Ajukan pertanyaan dan berdiskusilah dengan developer lain.

Report Issues

Laporkan bug atau ajukan fitur.

Dukungan

Untuk mendapatkan bantuan terkait Kotlin SDK:

Berkontribusi

Untuk berkontribusi, baca panduan kontribusi.
Terakhir diubah pada 28 September 2026