Prasyarat
Untuk mengintegrasikan API Dodo Payments, Anda memerlukan:- Akun pedagang Dodo Payments
- Kredensial API (kunci API dan kunci rahasia webhook) dari dasbor
Integrasi API
Sesi Checkout
Gunakan Checkout Sessions untuk menjual produk langganan dengan checkout yang aman dan dihosting. Sertakan produk langganan Anda diproduct_cart dan alihkan pelanggan ke checkout_url.
- Node.js SDK
- Python SDK
- REST API
Respons API
Berikut adalah contoh respons:checkout_url.
Webhook
Saat mengintegrasikan langganan, Anda akan menerima webhook untuk melacak siklus hidup langganan. Webhook ini membantu Anda mengelola status langganan dan skenario pembayaran dengan efektif. Untuk mengatur endpoint webhook Anda, silakan ikuti Panduan Integrasi Rinci.Jenis Acara Langganan
Berikut adalah acara webhook yang melacak perubahan status langganan:subscription.active- Langganan berhasil diaktifkan.subscription.updated- Objek langganan diperbarui (dipicu pada setiap perubahan bidang).subscription.on_hold- Langganan ditangguhkan karena pembaruan gagal.subscription.failed- Pembuatan langganan gagal selama pembuatan mandat.subscription.renewed- Langganan diperbarui untuk periode penagihan berikutnya.
Skenario Pembayaran
Webhook yang Anda terima dan waktunya bergantung pada apakah produk memiliki masa uji coba. Penagihan langsung (0 hari uji coba):subscription.active: mandate diotorisasi dan subscription diaktifkan.payment.succeeded: mengonfirmasi charge pertama. Ini biasanya terjadi dalam 2–10 menit setelah checkout.
- Saat uji coba dimulai (checkout):
subscription.activedipicu setelah payment method diotorisasi. Belum ada recurring charge yang diambil. Charge pertama yang sebenarnya ditunda hingga uji coba berakhir. - Saat uji coba berakhir: jumlah berulang ditagihkan, dan Anda menerima
payment.succeededbersama dengansubscription.renewed.
subscription.renewed: dipicu pada setiap billing cycle saat pembayaran renewal dipotong, selalu bersamapayment.succeeded. Event ini juga membawanext_billing_dateyang telah diperbarui.
Setiap kali uang benar-benar dipotong untuk produk subscription, Anda mendapatkan
subscription.renewed dan payment.succeeded. Gunakan subscription.renewed (bukan hanya payment.succeeded) sebagai sinyal untuk memperpanjang akses ke cycle berikutnya.- Kegagalan Subscription
subscription.failed- Subscription gagal dibuat karena kegagalan membuat mandate.payment.failed- Menunjukkan pembayaran gagal.
- Subscription Ditangguhkan
subscription.on_hold- Subscription ditangguhkan karena pembayaran renewal atau charge perubahan plan gagal.- Saat subscription ditangguhkan, subscription tidak akan diperbarui secara otomatis sampai payment method diperbarui.
Praktik Terbaik: Untuk menyederhanakan implementasi, kami menyarankan agar Anda terutama melacak event subscription untuk mengelola lifecycle subscription.
subscription.failed vs. subscription.on_hold
Kedua event ini mudah tertukar, tetapi memerlukan penanganan yang sangat berbeda:
Menangani Subscription yang Ditangguhkan
Saat subscription memasuki statuson_hold, Anda perlu memperbarui payment method untuk mengaktifkannya kembali. Bagian ini menjelaskan kapan subscription ditangguhkan dan cara menanganinya.
Kapan Subscription Ditangguhkan
Subscription ditangguhkan ketika:- Pembayaran renewal gagal: Charge renewal otomatis gagal karena dana tidak mencukupi, kartu kedaluwarsa, atau penolakan bank
- Charge perubahan plan gagal: Charge langsung selama upgrade/downgrade plan gagal
- Otorisasi payment method gagal: Payment method tidak dapat diotorisasi untuk recurring charges
Mengaktifkan Kembali Subscription yang Ditangguhkan
Untuk mengaktifkan kembali subscription dari statuson_hold, gunakan Update Payment Method API. API ini secara otomatis:
- Membuat charge untuk jumlah yang masih harus dibayar
- Membuat invoice untuk charge tersebut
- Memproses pembayaran menggunakan payment method baru
- Mengaktifkan kembali subscription ke status
activesetelah pembayaran berhasil
1
Handle subscription.on_hold webhook
Saat menerima webhook
subscription.on_hold, perbarui state aplikasi Anda dan beri tahu customer:2
Update payment method
Saat customer siap memperbarui payment method, panggil Update Payment Method API:
Anda juga dapat menggunakan payment method ID yang sudah ada jika customer telah menyimpan payment method:
3
Monitor webhook events
Setelah memperbarui payment method, pantau event webhook berikut:
payment.succeeded- Charge untuk jumlah yang masih harus dibayar berhasilsubscription.active- Subscription telah diaktifkan kembali
Contoh payload event Subscription
Mengubah Plan Subscription
Anda dapat melakukan upgrade atau downgrade plan subscription menggunakan endpoint change plan API. Ini memungkinkan Anda mengubah produk, kuantitas, dan menangani proration subscription.Change Plan API Reference
Untuk informasi terperinci tentang perubahan plan subscription, lihat dokumentasi Change Plan API kami.
Opsi Proration
Saat mengubah plan subscription, Anda memiliki dua opsi untuk menangani charge langsung:1. prorated_immediately
- Menghitung jumlah prorata berdasarkan sisa waktu dalam billing cycle saat ini
- Menagih customer hanya untuk selisih antara plan lama dan baru
- Selama masa uji coba, opsi ini akan langsung memindahkan user ke plan baru dan langsung menagih customer
2. full_immediately
- Menagih customer seluruh jumlah subscription untuk plan baru
- Mengabaikan sisa waktu atau kredit dari plan sebelumnya
- Berguna jika Anda ingin mengatur ulang billing cycle atau menagih jumlah penuh tanpa memperhatikan proration
3. difference_immediately
- Saat melakukan upgrade, customer langsung ditagih sebesar selisih antara kedua jumlah plan.
- Misalnya, jika plan saat ini 30 Dolar dan customer melakukan upgrade ke plan 80 Dolar, mereka langsung ditagih $50.
- Saat melakukan downgrade, jumlah yang tidak terpakai dari plan saat ini ditambahkan sebagai kredit internal dan secara otomatis digunakan untuk renewal subscription berikutnya.
- Misalnya, jika plan saat ini 50 Dolar dan customer beralih ke plan 20 Dolar, sisa $30 dikreditkan dan digunakan untuk billing cycle berikutnya.
4. do_not_bill
- Menerapkan perubahan plan secara langsung tetapi tidak menagih apa pun saat perubahan dilakukan.
- Plan yang diperbarui (beserta quantity/add-ons) ditagihkan pada renewal terjadwal berikutnya, dan tanggal billing asli dipertahankan.
Perilaku
- Saat Anda memanggil API ini, Dodo Payments segera memulai charge berdasarkan opsi proration yang Anda pilih
- Jika perubahan plan merupakan downgrade dan Anda menggunakan
prorated_immediately, kredit akan dihitung secara otomatis dan ditambahkan ke saldo kredit subscription. Kredit ini khusus untuk subscription tersebut dan hanya akan digunakan untuk mengimbangi recurring payments mendatang dari subscription yang sama - Opsi
full_immediatelymelewati penghitungan kredit dan menagih jumlah lengkap plan baru
Pemrosesan Charge
- Charge langsung yang dimulai setelah perubahan plan biasanya selesai diproses dalam waktu kurang dari 2 menit
- Jika charge langsung ini gagal karena alasan apa pun, subscription secara otomatis ditangguhkan sampai masalah teratasi
Subscription On-Demand
Create Subscription
Referensi API untuk membuat produk langganan dan mengelola siklus hidup langganan
Change Subscription Plan
Referensi API untuk meningkatkan, menurunkan, atau mengubah paket langganan dengan opsi prorata
Update Payment Method
Referensi API untuk memperbarui metode pembayaran dan mengaktifkan kembali langganan yang ditunda
Patch Subscription
Referensi API untuk memperbarui detail dan konfigurasi langganan
on_demand dalam request body Anda. Ini memungkinkan Anda mengotorisasi payment method tanpa charge langsung, atau menetapkan harga awal khusus.
Untuk menagih subscription on-demand:
Untuk charge berikutnya, gunakan endpoint POST /subscriptions//charge dan tentukan jumlah yang akan ditagihkan kepada customer untuk transaksi tersebut.
Untuk panduan lengkap langkah demi langkah (termasuk contoh request/response, kebijakan retry yang aman, dan penanganan webhook), lihat Panduan Subscription On-Demand.
Hal Penting yang Perlu Diketahui tentang Penagihan Subscription
Trial menggunakan otorisasi $0, bukan charge. Saat subscription memiliki trial, dimulainya trial membuat otorisasi mandate $0 untuk menyimpan kartu; charge pertama yang sebenarnya terjadi saat trial berakhir. Dalam daftar payments, subscription yang sedang trial menampilkan tepat satu payment dengan
amount: 0.Lifecycle subscription:
on_hold = renewal gagal (dapat dipulihkan: minta customer memperbarui payment method; dunning retries berlaku). expired = masa berlaku berakhir tanpa renewal dan tidak dapat diaktifkan kembali. Customer harus berlangganan kembali. cancelled = diakhiri oleh customer atau merchant. Sebagian besar kegagalan renewal adalah penolakan dari pihak issuer (dana tidak mencukupi, kartu ditolak), bukan kesalahan Dodo.Referensi API Terkait
Create Subscription
Referensi API untuk membuat produk subscription dan mengelola lifecycle subscription
Change Subscription Plan
Referensi API untuk melakukan upgrade, downgrade, atau mengubah plan subscription dengan opsi proration
Update Payment Method
Referensi API untuk memperbarui payment method dan mengaktifkan kembali subscription yang ditangguhkan
Patch Subscription
Referensi API untuk memperbarui detail dan konfigurasi subscription