Skip to main content
Go SDK menyediakan akses bertipe untuk aplikasi Go ke REST API Dodo Payments. Setiap metode menerima context.Context, parameter request menggunakan wrapper Field yang membedakan zero value dari field yang dihilangkan, dan Anda dapat menambahkan middleware ke setiap request.

Instalasi

Tambahkan modul ke project Anda:
Untuk menetapkan versi tertentu:
SDK memerlukan Go 1.22 atau yang lebih baru.

Memulai dengan Cepat

Buat client, lalu buat checkout session:
Jika Anda tidak menyertakan option.WithBearerToken, NewClient membaca environment variable DODO_PAYMENTS_API_KEY. Jika Anda tidak menyertakan option.WithEnvironmentTestMode(), client terhubung ke live mode. API key test mode hanya berfungsi dalam test mode.
Simpan API key dalam environment variable atau secrets manager. Jangan pernah menuliskannya secara hardcode dalam source code.

Fitur Utama

Context Support

Setiap metode menerima context.Context untuk cancellation dan timeout.

Strong Typing

Parameter request dan struct response bertipe untuk pemeriksaan saat compile time.

Middleware

Tambahkan middleware dengan option.WithMiddleware untuk logging, metrics, dan logika khusus.

Goroutine Safe

Gunakan satu client bersama di beberapa goroutine.

Konfigurasi

NewClient membaca DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (webhook signing secret Anda), dan DODO_PAYMENTS_BASE_URL dari environment. Opsi yang Anda teruskan, seperti option.WithBearerToken, option.WithWebhookKey, dan option.WithBaseURL, akan menimpanya. Untuk memverifikasi webhook, teruskan raw request body dan header ke client.Webhooks.Unwrap(rawBody, r.Header). Fungsi ini memeriksa signature dengan webhook key Anda dan mengembalikan event yang telah di-parse. client.Webhooks.UnsafeUnwrap(rawBody) mem-parse body tanpa memverifikasinya, jadi gunakan hanya untuk testing. Lihat Webhooks. Contoh di halaman ini menggunakan client dari Quick Start.

Context dan Timeout

Request tidak memiliki timeout secara default. Deadline context membatasi seluruh call, termasuk retry. Untuk membatasi setiap attempt, tambahkan option.WithRequestTimeout():

Konfigurasi Retry

SDK melakukan retry untuk connection error dan response dengan status 408, 409, 429, atau 500 ke atas. Secara default, SDK melakukan retry dua kali dengan exponential backoff. Tetapkan option.WithMaxRetries pada client atau satu request:

Operasi Umum

Contoh di bagian ini juga menggunakan context, misalnya ctx := context.Background().

Membuat Checkout Session

Buat checkout session, lalu redirect customer ke CheckoutURL 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 kembali berdasarkan ID. Nilai metadata menggunakan union type dari package shared:

Menangani Subscription

Buat subscription, charge subscription on-demand, dan baca riwayat penggunaan subscription.
POST /subscriptions (metode Subscriptions.New milik SDK) deprecated. Metode ini masih berfungsi untuk integrasi yang sudah ada, tetapi integrasi baru sebaiknya membuat subscription melalui Checkout Session.
Billing hanya memerlukan Country, yaitu kode negara ISO dua huruf. Customer adalah CustomerRequestUnionParam: teruskan AttachExistingCustomerParam{CustomerID: ...} untuk customer yang sudah ada atau NewCustomerParam{Email: ..., Name: ...} untuk membuat customer baru. Charge digunakan untuk on-demand subscriptions, dan ProductPrice menggunakan unit mata uang terkecil. GetUsageHistory mengembalikan satu halaman hasil; GetUsageHistoryAutoPaging melakukan iterasi pada setiap halaman.

Usage-Based Billing

Memasukkan Usage Event

Kirim usage event untuk customer:
EventID adalah idempotency key, jadi berikan nilai unik untuk setiap event. Jika EventID yang sama muncul dua kali dalam satu request, seluruh request akan ditolak. Jika EventID sudah pernah di-ingest, event baru akan diabaikan. Satu request dapat menerima hingga 1.000 event. Timestamp secara default menggunakan waktu saat ini dan akan ditolak jika lebih dari 1 jam di masa lalu atau lebih dari 5 menit di masa mendatang.

Mencantumkan Usage Event

Cantumkan event yang difilter berdasarkan customer dan nama event:
List mengembalikan satu halaman. Untuk melakukan iterasi pada setiap halaman, panggil client.UsageEvents.ListAutoPaging(ctx, params) dan lakukan loop dengan iter.Next(), iter.Current(), dan iter.Err(). Metode list lainnya memiliki varian AutoPaging yang sama, dan setiap halaman memiliki metode GetNextPage().

Penanganan Error

Saat API mengembalikan status code non-success, SDK mengembalikan error bertipe *dodopayments.Error. Error ini memiliki StatusCode, *http.Request dan *http.Response, serta JSON dari error body. Gunakan errors.As untuk memeriksanya, lalu buat percabangan berdasarkan StatusCode untuk menangani kasus tertentu:
Error lainnya dikembalikan tanpa pembungkus. Misalnya, jika HTTP transport gagal, Anda mungkin menerima *url.Error yang membungkus *net.OpError. apiErr.DumpRequest(true) mengembalikan request yang telah diserialisasi.

Middleware

Tambahkan middleware dengan option.WithMiddleware. Middleware menerima setiap request dan fungsi next yang mengirimkannya:
Beberapa middleware dalam satu pemanggilan option.WithMiddleware dijalankan dari kiri ke kanan. Middleware yang diteruskan ke NewClient dijalankan sebelum middleware yang diteruskan ke satu request.

Concurrency

Client aman digunakan secara concurrent, sehingga Anda dapat menggunakan satu client bersama di beberapa goroutine:

Resource

GitHub Repository

Source code, release, dan daftar metode lengkap.

API Reference

Setiap endpoint, parameter, dan response.

Discord Community

Ajukan pertanyaan dan berdiskusi dengan developer lain.

Report Issues

Laporkan bug atau minta fitur.

Dukungan

Untuk mendapatkan bantuan terkait Go SDK:

Kontribusi

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