Langsung ke konten utama

Ikhtisar

Dodo Payments API menggunakan kode status HTTP standar dan kode kesalahan kustom untuk menunjukkan keberhasilan atau kegagalan permintaan API. Ketika terjadi kesalahan, API mengembalikan kode status HTTP yang sesuai dan respons JSON yang berisi informasi rinci tentang kesalahan tersebut. Setiap respons kesalahan mencakup:
  • Kode status HTTP yang menunjukkan kategori umum dari kesalahan
  • Kode kesalahan spesifik yang mengidentifikasi sifat tepat dari kesalahan
  • Pesan kesalahan yang dapat dibaca manusia yang menjelaskan apa yang salah
  • Rincian tambahan tentang kesalahan jika berlaku
Memahami kode kesalahan ini dan artinya sangat penting untuk:
  • Memecahkan masalah integrasi
  • Menerapkan penanganan kesalahan yang tepat dalam aplikasi Anda
  • Memberikan umpan balik yang berarti kepada pengguna akhir
  • Mempertahankan sistem pemrosesan pembayaran yang kuat
Bagian berikut memberikan informasi rinci tentang kode status HTTP standar dan kode kesalahan spesifik yang mungkin Anda temui saat menggunakan Dodo Payments API.

Kode Kesalahan API Standar

Kode kesalahanStatus HTTPDeskripsi
400Permintaan BurukPermintaan tidak terformat dengan baik atau mengandung parameter yang tidak valid
401Tidak TerautentikasiAutentikasi gagal atau kunci API tidak valid
403DilarangKunci API tidak memiliki izin untuk mengakses sumber daya yang diminta
404Tidak DitemukanSumber daya yang diminta tidak ada
405Metode Tidak DiizinkanMetode HTTP tidak didukung untuk endpoint ini
409KonflikPermintaan bertentangan dengan keadaan saat ini dari sumber daya
422Entitas Tidak Dapat DiprosesPermintaan terformat dengan baik tetapi mengandung kesalahan semantik
429Terlalu Banyak PermintaanBatas laju terlampaui
500Kesalahan Server InternalTerjadi kesalahan yang tidak terduga di server kami
502Gerbang BurukServer menerima respons tidak valid dari server hulu
503Layanan Tidak TersediaLayanan tidak tersedia sementara
504Waktu Habis GerbangServer kehabisan waktu saat menunggu respons dari server hulu

Format Respons Kesalahan

Ketika terjadi kesalahan, API mengembalikan respons JSON dengan struktur berikut:
{
  "code": "UNSUPPORTED_COUNTRY",
  "message": "Country AI currently not supported"
}

Referensi Kode Kesalahan

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Trigger: Aktivasi kunci lisensi: batas baru < jumlah instance yang ada
    • Message: Batas aktivasi baru tidak boleh kurang dari jumlah instance saat ini
  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: Upaya menambahkan addon ke langganan penagihan berbasis penggunaan
    • Message: Addon dalam langganan tidak didukung untuk Penagihan Berbasis Penggunaan
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Trigger: Upaya menambahkan addon ke langganan on-demand
    • Message: Addon tidak diizinkan untuk langganan on demand
  • BRAND_MISMATCH
    • Trigger: Item keranjang berasal dari merek berbeda
    • Message: Semua item di keranjang produk harus berasal dari merek yang sama
  • BRAND_NOT_ENABLED
    • Trigger: Merek dinonaktifkan atau tidak aktif
    • Message: Merek yang diberikan tidak diaktifkan
  • BRAND_SUBMISSION_NOT_ENABLED
    • Trigger: Fitur pengiriman ulang verifikasi merek tidak diaktifkan
    • Message: Pengiriman ulang verifikasi merek tidak diaktifkan
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: Upaya mengenakan biaya pada langganan yang dijadwalkan dibatalkan
    • Message: Langganan dijadwalkan untuk dibatalkan
  • CHECKOUT_SESSION_CONSUMED
    • Trigger: Sesi checkout sudah menghasilkan pembayaran
    • Message: Sesi checkout sudah digunakan
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Trigger: Pembuatan kode diskon duplikat
    • Message: Kode diskon sudah ada
  • DISCOUNT_CODE_EXPIRED
    • Trigger: Kode diskon melewati tanggal expires_at
    • Message: Kode diskon kedaluwarsa
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Trigger: Diskon digunakan ulang setelah usage_limit tercapai
    • Message: Batas penggunaan tidak boleh kurang dari times_used / Kode diskon mencapai batas penggunaan
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Trigger: Kode diterapkan pada langganan on-demand
    • Message: Kupon diskon tidak tersedia untuk langganan on demand
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Trigger: Kode diterapkan ke produk yang tidak terkait
    • Message: Kupon diskon tidak tersedia untuk produk ini
  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Trigger: item_id yang sama muncul dua kali dalam items[]
    • Message: item_id duplikat ditentukan dalam array items
  • DUPLICATE_METER_IDS_IN_REQUEST
    • Trigger: ID meter yang sama muncul beberapa kali dalam permintaan
    • Message: ID meter duplikat tidak diperbolehkan
  • EXCHANGE_RATE_NOT_FOUND
    • Trigger: Tidak ada nilai tukar FX untuk pasangan mata uang from → to
    • Message: Nilai tukar tidak ditemukan untuk mengonversi dari Mata Uang ke Mata Uang
  • EXISTING_REFUND_REQUEST_PROCESSING
    • Trigger: Permintaan pengembalian dana sebelumnya masih diproses
    • Message: Permintaan pengembalian dana dengan status “Pending” masih diproses
  • INACTIVE_LICENSE_KEY
    • Trigger: Status kunci ≠ ACTIVE
    • Message: Kunci lisensi tidak aktif
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: Perubahan paket pada langganan yang tidak aktif
    • Message: Mengubah paket tidak didukung untuk langganan yang tidak aktif
  • INSUFFICIENT_WALLET_FUNDS
    • Trigger: Saldo dompet < jumlah debit
    • Message: Dana tidak mencukupi di dompet
  • INTEGER_CONVERSION_FAILURE
    • Trigger: Konversi integer ↔ string/desimal apa pun yang gagal di sisi server
    • Message: Kegagalan Konversi Integer
  • INTERNAL_SERVER_ERROR
    • Trigger: Pengecualian tidak ditangkap; Anda harus mencatat detail di sisi server
    • Message: Tidak ada pesan publik (500 umum)
  • INVALID_DISCOUNT_CODE
    • Trigger: Kode tidak ada / tidak berlaku
    • Message: Kode Diskon tidak valid / Kode Diskon tidak dapat diterapkan ke produk mana pun dalam keranjang
  • INVALID_PERCENTAGE
    • Trigger: Jumlah persentase > 100% (atau 10.000 basis poin)
    • Message: Jumlah persentase tidak boleh lebih dari 10000 / Jumlah kode diskon tidak boleh lebih dari 100%
  • INVALID_QUANTITY
    • Trigger: Kuantitas tidak valid ditentukan untuk harga berbasis penggunaan
    • Message: Hanya 1 kuantitas yang diizinkan pada produk harga berbasis penggunaan
  • INVALID_QUERY_PARAMS
    • Trigger: Parameter kueri yang saling eksklusif / rusak
    • Message: Parameter kueri hanya boleh berisi salah satu time_frame atau (start, end)
  • INVALID_REQUEST_BODY
    • Trigger: JSON rusak atau pelanggaran skema
    • Message: Isi permintaan Anda tidak valid. Harap periksa header dan objek permintaan Anda.
  • INVALID_REQUEST_PARAMETERS
    • Trigger: Semantik salah (misal tanggal di masa lalu)
    • Message: Tidak dapat mengubah next_billing_date ke waktu yang lalu
  • INVALID_SUGGESTED_PRICE
    • Trigger: Harga PWYW < harga minimum yang diperbolehkan
    • Message: Harga yang disarankan tidak boleh lebih rendah dari harga minimum. Dalam kasus pay what you want, harga dianggap sebagai jumlah minimum yang diterima
  • INVALID_TAX_ID
    • Trigger: VAT/GST/TIN gagal validasi
    • Message: ID Pajak tidak valid
  • LICENSE_KEY_LIMIT_REACHED
    • Trigger: Aktivasi = batas
    • Message: Batas aktivasi kunci lisensi tercapai
  • LICENSE_KEY_NOT_FOUND
    • Trigger: ID instance atau ID kunci tidak valid
    • Message: Instance kunci lisensi tidak ditemukan atau tidak milik kunci lisensi ini
  • LINE_ITEM_FULLY_REFUNDED
    • Trigger: Upaya mengembalikan item baris yang sudah sepenuhnya dikembalikan
    • Message: Item baris telah sepenuhnya dikembalikan, tidak dapat dikembalikan lebih lanjut.
  • LINE_ITEM_NOT_FOUND
    • Trigger: ID item tidak bagian dari pembayaran yang dirujuk
    • Message: Item baris tidak ditemukan dalam pembayaran
  • LINE_ITEM_PRORATED
    • Trigger: Upaya pengembalian dana atau pembaruan pada baris yang diprorata
    • Message: Item baris tidak dapat dikembalikan karena diprorata
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Trigger: Jumlah pengembalian dana > jumlah yang dibayar (termasuk pajak)
    • Message: Jumlah pengembalian dana yang diminta termasuk pajak untuk item baris adalah yang melebihi jumlah yang dibayar
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Trigger: Jumlah pengembalian dana di bawah ambang minimum
    • Message: Jumlah pengembalian dana yang diminta untuk item baris adalah yang terlalu rendah
  • MAXIMUM_KEYS_REACHED
    • Trigger: Metadata / custom-fields melebihi 50 pasangan
    • Message: Melebihi 50 pasangan kunci-nilai
  • MERCHANT_NOT_LIVE
    • Trigger: Bisnis masih dalam mode uji/terkotak
    • Message: Pedagang belum aktif
  • METER_IS_DELETED
    • Trigger: Upaya menggunakan meter yang dihapus
    • Message: Meter sudah dihapus
  • MISSING_ADDON_IDS
    • Trigger: Daftar addon_id kosong atau ID tidak diketahui
    • Message: Satu atau lebih ID produk tidak ada:
  • MISSING_METER_IDS
    • Trigger: Daftar ID meter kosong atau berisi ID tidak valid
    • Message: Satu atau lebih ID meter tidak ada:
  • MISSING_PRODUCT_INFORMATION
    • Trigger: Produk ada tetapi informasi wajib hilang
    • Message: Produk ada tetapi informasi wajib lainnya hilang atau tidak valid
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Trigger: Upaya membuat saldo dompet negatif
    • Message: Saldo dompet tidak boleh dibuat negatif
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Trigger: Setelah disaring, tidak ada yang tersisa
    • Message: Tidak ditemukan metode pembayaran yang memenuhi syarat
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Trigger: Upaya menetapkan kedaluwarsa pada kunci berbasis langganan
    • Message: Tidak dapat menetapkan tanggal kedaluwarsa untuk kunci lisensi berbasis langganan
  • NOT_FOUND
    • Trigger: 404 umum untuk sumber daya yang hilang
    • Message: Item tidak ditemukan (atau lebih spesifik)
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: Pertukaran paket tidak diizinkan untuk on-demand
    • Message: Mengubah paket tidak didukung untuk langganan on demand
  • ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED
    • Trigger: Bisnis mematikan flag fitur
    • Message: Langganan on demand tidak diaktifkan untuk bisnis ini
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: Upaya menggunakan on-demand dengan penagihan berbasis penggunaan
    • Message: Langganan On Demand tidak didukung untuk Penagihan Berbasis Penggunaan
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Trigger: Harga hilang untuk produk PWYW
    • Message: Jumlah wajib untuk produk pay as you want
  • PAYMENT_ALREADY_REFUNDED
    • Trigger: Pengembalian dana duplikat
    • Message: Pembayaran ini sudah dikembalikan
  • PAYMENT_HAS_BEEN_REFUNDED
    • Trigger: Pembayaran telah sepenuhnya dikembalikan
    • Message: ID Pembayaran telah sepenuhnya dikembalikan.
  • PAYMENT_NOT_SUCCEEDED
    • Trigger: Upaya mengembalikan/memproses pembayaran yang gagal
    • Message: Pembayaran yang diberikan belum berhasil
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: Upaya perubahan paket pada langganan yang dijadwalkan untuk dibatalkan
    • Message: Langganan dijadwalkan untuk dibatalkan
  • PREVIOUS_PAYMENT_PENDING
    • Trigger: Upaya membuat biaya sementara yang sebelumnya belum dalam status terminal
    • Message: Tidak dapat membuat biaya baru karena pembayaran sebelumnya belum berhasil
  • PRODUCT_CART_EMPTY
    • Trigger: Keranjang produk kosong dikirimkan
    • Message: product_cart kosong
  • PRODUCT_IS_DELETED
    • Trigger: Produk dihapus secara lunak
    • Message: Tidak ada pesan
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Trigger: Jumlah pengembalian dana agregat > jumlah yang dibayar
    • Message: Jumlah pengembalian dana yang dihitung lebih besar daripada jumlah yang dibayar
  • REFUND_WINDOW_EXPIRED
    • Trigger: Di luar jendela pengembalian dana yang diperbolehkan
    • Message: Pengembalian dana tidak dapat dimulai hari setelah pembuatan pembayaran. Hubungi support@dodopayments.com.
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Trigger: Jumlah < minimum produk
    • Message: Jumlah tidak boleh kurang dari jumlah minimum yang ditentukan untuk produk
  • SUBSCRIPTION_EXPIRED
    • Trigger: Penagihan melewati ends_at
    • Message: Langganan kedaluwarsa tidak dapat membuat biaya baru
  • SUBSCRIPTION_INACTIVE
    • Trigger: Status ≠ ACTIVE
    • Message: Langganan tidak aktif
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Trigger: Diharapkan on-demand tetapi mendapat interval tetap
    • Message: Langganan sudah bukan on demand
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Trigger: Pengulangan pembayaran langganan melewati batas percobaan maksimum
    • Message: Batas pengulangan maksimum sebanyak 10 percobaan terlampaui untuk langganan ini
  • TOO_MANY_REQUESTS
    • Trigger: 429 pembatasan tingkat
    • Message: Tidak ada pesan
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Trigger: Total gabungan keranjang < minimum gateway
    • Message: Jumlah minimum sebesar diperlukan untuk memproses pembayaran
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Trigger: Upaya memperbarui merek utama melalui API reguler
    • Message: Merek utama tidak dapat diperbarui melalui endpoint API ini.
  • UNAUTHORIZED
    • Trigger: Tidak ada API key atau token / scope tidak valid
    • Message: Anda tidak berwenang melakukan tindakan ini
  • UNSUPPORTED_ACTION
    • Trigger: Tindakan tidak didukung untuk tipe sumber daya
    • Message: Mengubah paket untuk langganan berbasis penggunaan tidak didukung
  • UNSUPPORTED_BILLING_CURRENCY
    • Trigger: Langganan dibatasi untuk USD
    • Message: Mata uang penagihan non-USD tidak didukung untuk langganan
  • UNSUPPORTED_COUNTRY
    • Trigger: Geo belum didukung
    • Message: Negara saat ini tidak didukung
  • UNSUPPORTED_CURRENCY
    • Trigger: Mata uang produk atau addon tidak valid
    • Message: Mata uang saat ini tidak didukung / Hanya produk USD dan INR yang didukung saat ini / Hanya USD dan INR yang didukung untuk harga addon / Hanya dapat meminta USD atau INR untuk billing_currency / Mata uang Tidak Didukung / Mata uang tak terduga untuk langganan kartu India
  • UNSUPPORTED_DISCOUNT_TYPE
    • Trigger: Diskon jumlah tetap, dll., belum tersedia
    • Message: Saat ini hanya kode diskon persentase yang didukung
  • UNSUPPORTED_PAYMENT_CURRENCY
    • Trigger: Mata uang pembayaran diblokir untuk konektor
    • Message: Transaksi INR tidak didukung untuk transaksi ini
  • UNSUPPORTED_TAX_CATEGORY
    • Trigger: String kategori pajak tidak dalam enum
    • Message: Kategori saat ini tidak didukung
  • UNSUCCESSFUL_PAYMENT_ID
    • Trigger: ID Pembayaran merujuk ke pembayaran yang gagal
    • Message: ID Pembayaran memiliki status tidak berhasil.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Trigger: Upaya mengembalikan dana untuk pembayaran bernilai nol
    • Message: Tidak dapat mengembalikan pembayaran dengan jumlah mata uang nol

Praktik Terbaik

  1. Selalu tangani kesalahan dengan baik dalam aplikasi Anda
  2. Terapkan pencatatan kesalahan yang tepat
  3. Gunakan pesan kesalahan yang sesuai untuk pengguna akhir
  4. Terapkan logika pengulangan untuk kesalahan sementara
  5. Hubungi dukungan untuk masalah yang belum terpecahkan

Dukungan

Untuk bantuan tambahan dengan kode kesalahan atau masalah integrasi, silakan hubungi tim dukungan kami di support@dodopayments.com.