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:SDK memerlukan Go 1.22 atau yang lebih baru.
Memulai dengan Cepat
Buat client, lalu buat checkout session: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.
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, tambahkanoption.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. Tetapkanoption.WithMaxRetries pada client atau satu request:
Operasi Umum
Contoh di bagian ini juga menggunakan context, misalnyactx := context.Background().
Membuat Checkout Session
Buat checkout session, lalu redirect customer keCheckoutURL yang dikembalikan:
Mengelola Customer
Buat customer dengan alamat email dan nama, lalu ambil kembali berdasarkan ID. Nilai metadata menggunakan union type dari packageshared:
Menangani Subscription
Buat subscription, charge subscription on-demand, dan baca riwayat penggunaan subscription.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:
*url.Error yang membungkus *net.OpError. apiErr.DumpRequest(true) mengembalikan request yang telah diserialisasi.
Middleware
Tambahkan middleware denganoption.WithMiddleware. Middleware menerima setiap request dan fungsi next yang mengirimkannya:
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:- Discord: Bergabunglah dengan community server untuk mendapatkan bantuan secara real-time.
- Email: Hubungi support@dodopayments.com.
- GitHub: Buka issue di repository.