Skip to main content
Ruby SDK memberikan akses ke REST API Dodo Payments bagi aplikasi Ruby. SDK ini mengirim request menggunakan net/http dari standard library dan connection pool, mencoba kembali request yang gagal, melakukan iterasi melalui daftar berpaginasi untuk Anda, serta menyediakan definisi tipe RBI dan RBS.

Instalasi

Tambahkan gem ke dalam Gemfile Anda:
Gemfile
Rilis SDK menambahkan dukungan untuk perubahan API. Jalankan bundle update dodopayments secara berkala agar tetap mutakhir.
Kemudian instal SDK:
SDK memerlukan Ruby 3.2.0 atau yang lebih baru.

Memulai dengan Cepat

Buat client, lalu buat checkout session:
Jika Anda tidak menyertakan bearer_token, client akan membaca environment variable DODO_PAYMENTS_API_KEY. Jika Anda tidak menyertakan environment, client akan terhubung ke live mode. API key test mode hanya berfungsi dengan environment: "test_mode".
Simpan API key dalam environment variable atau secrets manager. Jangan pernah melakukan commit ke version control atau mengeksposnya dalam kode Anda.

Fitur Utama

Ruby Conventions

Method dan keyword argument Snake_case, dengan hash biasa yang diterima untuk parameter bertingkat.

Elegant Syntax

Response berupa object dengan attribute reader, dan obj[:prop] juga dapat membaca field yang tidak didefinisikan SDK.

Auto-Pagination

auto_paging_each melakukan iterasi pada setiap item dan mengambil halaman berikutnya bila diperlukan.

Type Safety

Definisi RBI untuk Sorbet, tanpa dependensi pada sorbet-runtime.

Konfigurasi

Dodopayments::Client.new menerima bearer_token, webhook_key, environment, base_url, max_retries, timeout, initial_retry_delay, dan max_retry_delay. Jika Anda tidak menyertakannya, client akan membaca DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (webhook signing secret Anda), dan DODO_PAYMENTS_BASE_URL dari environment. Client ini thread-safe dan memiliki connection pool sendiri, jadi buat satu client untuk aplikasi Anda dan gunakan kembali. Untuk memverifikasi webhook, teruskan raw request body dan header ke dodo_payments.webhooks.unwrap(payload, headers: headers). Method ini memeriksa signature menggunakan webhook key Anda dan mengembalikan event yang telah di-parse. dodo_payments.webhooks.unsafe_unwrap(payload) mem-parse body tanpa memverifikasinya, jadi gunakan hanya untuk testing. Lihat Webhooks.

Konfigurasi Timeout

Request mengalami timeout setelah 60 detik secara default. Atur timeout, dalam satuan detik, pada client atau satu request tertentu:
Saat request mengalami timeout, SDK akan memunculkan Dodopayments::Errors::APITimeoutError. Request yang mengalami timeout akan dicoba kembali secara default.

Konfigurasi Retry

SDK mencoba kembali connection error, timeout, dan response dengan status 408, 409, 429, atau 500 ke atas. Secara default, SDK mencoba kembali sebanyak dua kali dengan exponential backoff singkat. Atur max_retries pada client atau satu request tertentu:

Operasi Umum

Contoh dalam bagian ini menggunakan client dodo_payments dari Quick Start.

Membuat Checkout Session

Buat checkout session, lalu redirect customer ke checkout_url yang dikembalikan:
Setiap checkout URL hanya dapat digunakan sekali dan kedaluwarsa setelah 24 jam. Untuk setiap opsi session, lihat Checkout Sessions.

Mengelola Customer

Buat customer dengan alamat email dan nama, lalu ambil berdasarkan ID:

Menangani Subscription

Buat subscription, kenakan biaya pada on-demand subscription, dan perbarui metadata subscription.
POST /subscriptions (method subscriptions.create milik SDK) deprecated. Method ini 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. customer menerima { customer_id: "..." } untuk melampirkan customer yang sudah ada atau { email: "...", name: "..." } untuk membuat customer baru. charge digunakan untuk on-demand subscriptions, dan product_price dinyatakan dalam unit terkecil mata uang.

Pagination

Auto-Pagination

Method list mengembalikan sebuah halaman. Baca items untuk halaman saat ini, atau panggil auto_paging_each untuk melakukan iterasi pada setiap item. Method ini mengambil halaman berikutnya saat diperlukan:

Pagination Manual

Untuk berpindah satu halaman setiap kali, panggil next_page? dan next_page:

Penanganan Error

Saat SDK tidak dapat terhubung ke API, atau API mengembalikan status 4xx atau 5xx, SDK akan memunculkan subclass dari Dodopayments::Errors::APIError:
Class error bergantung pada penyebabnya. Setiap error memiliki attribute status, headers, dan body:
SDK sudah mencoba kembali response 429 dengan exponential backoff. RateLimitError berarti percobaan kembali tersebut juga gagal, jadi tunggu lebih lama sebelum mengirim request lagi.

Type Safety dengan Sorbet

SDK menyediakan definisi RBI dan tidak bergantung pada sorbet-runtime. Untuk mendapatkan type-checking pada parameter request, teruskan model class, bukan hash:

Penggunaan Lanjutan

Endpoint yang Tidak Terdokumentasi

Untuk memanggil endpoint yang tidak memiliki method SDK, gunakan request. Method ini menerapkan authentication dan retries yang sama seperti method SDK:

Parameter yang Tidak Terdokumentasi

Untuk mengirim parameter yang tidak didefinisikan SDK, teruskan parameter tersebut dalam request_options. Parameter extra_* dengan nama yang sama seperti parameter terdokumentasi akan menggantikannya:

Integrasi Rails

Membuat Initializer

Buat satu client saat Rails dimulai, di config/initializers/dodo_payments.rb:

Pola Service Object

Bungkus client dalam service object:

Integrasi Controller

Panggil service dari controller dan redirect ke halaman checkout:

Integrasi Sinatra

Buat client sekali dalam blok configure dan gunakan di routes Anda:

Resource

GitHub Repository

Source code, releases, dan daftar method lengkap.

API Reference

Setiap endpoint, parameter, dan response.

Discord Community

Ajukan pertanyaan dan berdiskusi dengan developer lain.

Report Issues

Laporkan bug atau ajukan fitur.

Dukungan

Untuk mendapatkan bantuan terkait Ruby SDK:

Berkontribusi

Untuk berkontribusi, baca contributing guidelines.
Terakhir diubah pada 26 September 2026