Ikhtisar
Langganan sesuai permintaan memungkinkan Anda untuk mengotorisasi metode pembayaran pelanggan sekali dan kemudian mengenakan biaya variabel kapan pun Anda perlu, alih-alih pada jadwal tetap.Fitur ini mungkin perlu diaktifkan di akun Anda. Hubungi dukungan jika Anda tidak melihatnya di dasbor Anda.
- Membuat langganan sesuai permintaan (mengotorisasi mandat dengan harga awal opsional)
- Memicu biaya berikutnya dengan jumlah kustom
- Melacak hasil menggunakan webhook
Prasyarat
- Akun pedagang Dodo Payments dan kunci API
- Rahasia webhook yang dikonfigurasi dan endpoint untuk menerima peristiwa
- Produk langganan dalam katalog Anda
Cara kerja sesuai permintaan
- Anda membuat langganan dengan objek
on_demanduntuk mengotorisasi metode pembayaran dan secara opsional mengumpulkan biaya awal. - Kemudian, Anda membuat biaya terhadap langganan tersebut dengan jumlah kustom menggunakan endpoint biaya khusus.
- Anda mendengarkan webhook (misalnya,
payment.succeeded,payment.failed) untuk memperbarui sistem Anda.
Buat langganan sesuai permintaan
Endpoint: POST /subscriptions Bidang permintaan kunci (badan):Parameter Badan Permintaan
Parameter Badan Permintaan
ID produk untuk langganan.
Jumlah unit. Minimum 1.
Alamat penagihan untuk pelanggan.
Baik melampirkan pelanggan yang ada atau memberikan detail pelanggan.
Jika benar, membuat tautan checkout yang dihosting untuk otorisasi mandat dan pembayaran awal opsional.
Di mana untuk mengalihkan pelanggan setelah menyelesaikan checkout yang dihosting.
Jika benar, mengotorisasi metode pembayaran tanpa mengenakan biaya kepada pelanggan selama pembuatan.
Jumlah biaya awal (dalam unit mata uang terkecil). Jika ditentukan, nilai ini akan menggantikan harga asli produk yang ditetapkan selama pembuatan produk. Jika diabaikan, harga yang disimpan produk akan digunakan. Contoh: untuk mengenakan biaya $1,00, kirim
100.Penggantian mata uang opsional untuk biaya awal. Secara default menggunakan mata uang produk.
Penggantian deskripsi opsional untuk penagihan dan item baris.
Jika benar, menyertakan biaya mata uang adaptif dalam
product_price. Jika salah, biaya ditambahkan di atasnya. Diabaikan saat penetapan harga adaptif dinonaktifkan.Buat langganan sesuai permintaan
- Node.js SDK
- Python SDK
- Go SDK
- cURL
Set
payment_link: true, alihkan pelanggan ke payment_link untuk menyelesaikan otorisasi mandat.Success
Kenakan biaya langganan sesuai permintaan
Setelah mandat diotorisasi, buat biaya sesuai kebutuhan. Endpoint: POST /subscriptions/{subscription_id}/charge Bidang permintaan kunci (badan):Parameter badan permintaan biaya
Parameter badan permintaan biaya
Jumlah yang akan dikenakan biaya (dalam unit mata uang terkecil). Contoh: untuk mengenakan biaya $25,00, kirim
2500.Penggantian mata uang opsional untuk biaya.
Penggantian deskripsi opsional untuk biaya ini.
Jika benar, menyertakan biaya mata uang adaptif dalam
product_price. Jika salah, biaya ditambahkan di atasnya.Metadata tambahan untuk pembayaran. Jika diabaikan, metadata langganan digunakan.
- Node.js SDK
- Python SDK
- Go SDK
- cURL
Success
Pengulangan pembayaran
Sistem deteksi penipuan kami mungkin memblokir pola pengulangan yang agresif (dan dapat menandainya sebagai pengujian kartu yang potensial). Ikuti kebijakan pengulangan yang aman.Prinsip untuk kebijakan pengulangan yang aman
- Mekanisme penundaan: Gunakan penundaan eksponensial antara pengulangan.
- Batas pengulangan: Batasi total pengulangan (maksimal 3–4 percobaan).
- Penyaringan cerdas: Hanya ulangi pada kegagalan yang dapat diulang (misalnya, kesalahan jaringan/penerbit, dana tidak mencukupi); jangan pernah ulangi penolakan keras.
- Pencegahan pengujian kartu: Jangan ulangi kegagalan seperti
DO_NOT_HONOR,STOLEN_CARD,LOST_CARD,PICKUP_CARD,FRAUDULENT,AUTHENTICATION_FAILURE. - Variasi metadata (opsional): Jika Anda mempertahankan sistem pengulangan Anda sendiri, bedakan pengulangan melalui metadata (misalnya,
retry_attempt).
Jadwal pengulangan yang disarankan (langganan)
- Percobaan pertama: Segera setelah Anda membuat biaya
- Percobaan kedua: Setelah 3 hari
- Percobaan ketiga: Setelah 7 hari lagi (total 10 hari)
- Percobaan keempat (akhir): Setelah 7 hari lagi (total 17 hari)
Hindari pengulangan mendadak; sesuaikan dengan waktu otorisasi
- Jangkar pengulangan pada cap waktu otorisasi asli untuk menghindari perilaku “ledakan” di seluruh portofolio Anda.
- Contoh: Jika pelanggan memulai percobaan atau mandat pada pukul 1:10 siang hari ini, jadwalkan pengulangan berikutnya pada pukul 1:10 siang pada hari-hari berikutnya sesuai dengan penundaan Anda (misalnya, +3 hari → 1:10 siang, +7 hari → 1:10 siang).
- Sebagai alternatif, jika Anda menyimpan waktu pembayaran terakhir yang berhasil
T, jadwalkan percobaan berikutnya padaT + X daysuntuk mempertahankan penyelarasan waktu-hari.
Zona waktu dan DST: gunakan standar waktu yang konsisten untuk penjadwalan dan konversi hanya untuk tampilan untuk mempertahankan interval.
Kode penolakan yang sebaiknya tidak Anda ulangi
STOLEN_CARDDO_NOT_HONORFRAUDULENTPICKUP_CARDAUTHENTICATION_FAILURELOST_CARD
Untuk daftar lengkap alasan penolakan dan apakah mereka dapat diperbaiki oleh pengguna, lihat dokumentasi
Transaksi Gagal.
Pedoman implementasi (tanpa kode)
- Gunakan penjadwal/antrian yang mempertahankan cap waktu yang tepat; hitung percobaan berikutnya pada offset waktu-hari yang tepat (misalnya,
T + 3 dayspada HH:MM yang sama). - Pertahankan dan rujuk cap waktu pembayaran terakhir yang berhasil
Tuntuk menghitung percobaan berikutnya; jangan mengelompokkan beberapa langganan pada saat yang sama. - Selalu evaluasi alasan penolakan terakhir; hentikan pengulangan untuk penolakan keras dalam daftar lewati di atas.
- Batasi pengulangan bersamaan per pelanggan dan per akun untuk mencegah lonjakan yang tidak disengaja.
- Komunikasikan secara proaktif: email/SMS pelanggan untuk memperbarui metode pembayaran mereka sebelum percobaan berikutnya yang dijadwalkan.
- Gunakan metadata hanya untuk observabilitas (misalnya,
retry_attempt); jangan pernah mencoba untuk “menghindari” sistem penipuan/risiko dengan memutar bidang yang tidak penting.
Lacak hasil dengan webhook
Implementasikan penanganan webhook untuk melacak perjalanan pelanggan. Lihat Implementasi Webhook.- subscription.active: Mandat diotorisasi dan langganan diaktifkan
- subscription.failed: Pembuatan gagal (misalnya, kegagalan mandat)
- subscription.on_hold: Langganan ditangguhkan (misalnya, status tidak dibayar)
- payment.succeeded: Biaya berhasil
- payment.failed: Biaya gagal
Pengujian dan langkah selanjutnya
1
Buat dalam mode uji
Gunakan kunci API uji Anda untuk membuat langganan dengan
payment_link: true, lalu buka tautan dan selesaikan mandat.2
Picu biaya
Panggil endpoint biaya dengan
product_price kecil (misalnya, 100) dan verifikasi Anda menerima payment.succeeded.3
Go live
Beralih ke kunci API langsung Anda setelah Anda memvalidasi peristiwa dan pembaruan status internal.
Pemecahan Masalah
- 422 Permintaan Tidak Valid: Pastikan
on_demand.mandate_onlydisediakan saat pembuatan danproduct_pricedisediakan untuk biaya. - Kesalahan mata uang: Jika Anda mengganti
product_currency, pastikan itu didukung untuk akun dan pelanggan Anda. - Tidak ada webhook yang diterima: Verifikasi URL webhook dan konfigurasi rahasia tanda tangan.