Ikhtisar
Langganan sesuai permintaan memungkinkan Anda untuk mengotorisasi metode pembayaran pelanggan sekali dan kemudian mengenakan jumlah variabel kapan pun Anda perlu, alih-alih pada jadwal tetap. Fitur ini tersedia untuk semua akun—tidak memerlukan persetujuan. Gunakan panduan ini untuk:- 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 /checkouts Bidang permintaan kunci (badan):Silakan temukan di Buat Sesi Checkout
Buat langganan sesuai permintaan
- Node.js SDK
- Python SDK
- Go SDK
- cURL
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.Override mata uang opsional untuk biaya ini.
Override deskripsi opsional untuk biaya ini.
Jika true, termasuk biaya mata uang adaptif dalam
product_price. Jika false, 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 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 memelihara sistem pengulangan Anda sendiri, bedakan pengulangan melalui metadata (misalnya,
retry_attempt).
Jadwal pengulangan yang disarankan (langganan)
- Percobaan ke-1: Segera setelah Anda membuat biaya
- Percobaan ke-2: Setelah 3 hari
- Percobaan ke-3: Setelah 7 hari lagi (total 10 hari)
- Percobaan ke-4 (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 menjaga penyelarasan waktu dalam sehari.
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
Kegagalan Transaksi.
Pedoman implementasi (tanpa kode)
- Gunakan penjadwal/antrian yang mempertahankan cap waktu yang tepat; hitung percobaan berikutnya pada offset waktu 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
Buat dalam mode uji
Gunakan kunci API uji Anda untuk membuat langganan dengan
payment_link: true, lalu buka tautan dan selesaikan mandat.Memicu biaya
Panggil endpoint biaya dengan jumlah kecil
product_price (misalnya, 100) dan verifikasi Anda menerima payment.succeeded.Pemecahan masalah
- 422 Permintaan Tidak Valid: Pastikan
on_demand.mandate_onlydisediakan saat pembuatan danproduct_pricedisediakan untuk biaya. - Kesalahan mata uang: Jika Anda mengoverride
product_currency, pastikan itu didukung untuk akun dan pelanggan Anda. - Tidak ada webhook yang diterima: Verifikasi URL webhook dan konfigurasi rahasia tanda tangan.