Welcome to Xendit’s latest documentation. For legacy content, access the previous documentation here or the previous API reference here.

Overview

Prev Next

Subscriptions adalah solusi untuk mengelola pembayaran berulang menggunakan penjadwal Xendit. Ini menawarkan integrasi yang mudah dan fleksibel, memungkinkan Anda untuk mengonfigurasi dan mengotomatiskan siklus pembayaran berulang berdasarkan pengaturan Anda.

Dengan menggunakan produk Subscriptions, Anda menghilangkan kebutuhan untuk membuat sistem penjadwalan Anda sendiri, termasuk menangani pemulihan pembayaran yang gagal. Xendit mengoptimalkan tingkat keberhasilan pembayaran melalui fitur yang dirancang khusus untuk manajemen Subscriptions.

High level data objects

Nama data object

Deskripsi

Dibuat oleh

Plan

Objek data utama untuk mengelola logika Subscription Anda. Ini berisi detail seperti objek pelanggan, jumlah yang akan dipotong untuk setiap siklus, objek jadwal, dan konfigurasi paket Subscription dasar, termasuk fitur opsional.

Anda

Schedule

Menentukan kapan tindakan Subscription harus terjadi. Ini mencakup detail waktu yang ditentukan penjual, seperti interval (misalnya, harian, bulanan, tahunan) dan logika coba lagi. Objek jadwal dapat dibuat bersamaan dengan paket Subscription untuk mengaktifkan penyesuaian paket untuk setiap pelanggan.

Anda

Cycle

Dibuat secara otomatis berdasarkan objek paket Subscription. Setiap siklus Subscription mewakili instans penagihan individu (misalnya, paket bulanan selama setahun menghasilkan 12 siklus). Perubahan ad hoc dapat dilakukan pada siklus tertentu tanpa memengaruhi paket Subscription dasar. Paket Subscription memiliki hubungan satu-ke-banyak dengan siklusnya.

Xendit

Attempt

Mewakili setiap tindakan yang diambil untuk menyelesaikan siklus Subscription (misalnya, pembayaran). Beberapa upaya dapat terjadi dalam satu siklus tergantung pada konfigurasi percobaan ulang (misalnya, siklus dengan dua percobaan ulang dapat memiliki hingga tiga percobaan). Semua upaya disimpan dalam objek siklus yang sesuai. Setiap siklus Subscription memiliki hubungan satu-ke-banyak dengan upayanya.

Satu upaya dapat melibatkan beberapa action_id entri jika beberapa metode pembayaran dikonfigurasi dalam paket Subscription. Xendit akan memproses setiap metode pembayaran secara berurutan, berdasarkan prioritas, sampai salah satu berhasil atau semuanya gagal. Upaya Subscription memiliki hubungan one-to-many dengan action_id.

Xendit

Alur integrasi

Contoh alur integrasi jika Anda akan menyiapkan pembayaran Subscription untuk pengguna akhir Anda

  1. Setelah pengguna akhir memilih paket Subscription di sistem Anda, buat paket Subscriptionyang sesuai di Xendit.

  2. Gunakan yang ada customer_id jika pelanggan sudah terdaftar di Xendit. Jika tidak, buat pelanggan baru pada langkah ini.

  3. Buat paket Subscription dengan detail dan customer_id yang disepakati (misalnya, jadwal, interval).

  4. Jika Anda sudah memiliki metode pembayaran tertaut pengguna akhir Anda, berikan saat payment_method_id membuat Subscription. Jika Anda tidak memasukkannya, Xendit akan mengembalikan REQUIRES_ACTION status dan menghasilkan action objek yang akan dieksekusi. Ini action.url dapat dibagikan dengan pelanggan Anda, memungkinkan mereka untuk menautkan metode pembayaran mereka di halaman yang dihosting Xendit.

  5. Mengarahkan pelanggan ke halaman yang dihosting Xendit menggunakan .action.url

  6. Pelanggan menautkan metode pembayaran mereka di halaman yang dihosting Xendit.

  7. Setelah metode pembayaran ditautkan, terima recurring.plan_activation webhook, dan paket menjadi aktif. Lihat Plan lifecycle di bawah ini.

  8. Xendit memproses siklus Subscription berdasarkan dan anchor_date interval.

  9. Untuk setiap siklus, terima webhook yang menunjukkan pembaruan status:

    1. recurring.cycle.created: Siklus baru dibuat.

    2. recurring.cycle.retrying : Upaya pembayaran gagal, tetapi percobaan ulang dijadwalkan pada next_retry_timestamp.

    3. recurring.cycle.failed: Semua upaya percobaan ulang gagal.

    4. recurring.cycle.succeeded: Pembayaran untuk siklus berhasil.

Plan lifecycle

Status

Deskripsi

Event webhook

Requires Action

Paket Subscription dalam status REQUIRES_ACTION jika tidak ada payment_method_id. Setidaknya satu aktif payment_method_id harus dilampirkan pada plan. Ini akan menjadi status jika Anda ingin menggunakan halaman yang dihosting Xendit untuk mengarahkan pengguna akhir untuk menautkan metode pembayaran mereka.

Arahkan pengguna akhir ke action.url metode pembayaran untuk menambahkan metode pembayaran mereka.

Pending

Jika payment_method_id diberikan selama pembuatan paket, status paket akan menjadi PENDING. Tunggu webhook recurring.plan.activated untuk mengonfirmasi aktivasi.

Active

Plan menjadi ACTIVE ketika penjadwal menjalankan dan memproses pembayaran sesuai dengan jadwal yang ditetapkan. Tetap aktif hingga semua siklus dijalankan atau dinonaktifkan secara manual.

recurring.plan.activated

Inactive

Paket menjadi INACTIVE setelah semua siklus selesai atau dinonaktifkan secara manual. Paket tidak aktif tidak dapat diaktifkan kembali. Anda akan menerima recurring.plan.inactivated untuk transisi ini.

recurring.plan.inactivated

Cycle lifecycle

Status

Deskripsi

Event webhook

Created

Siklus telah dibuat dan siap dijalankan berdasarkan . schedule_timestamp Anda akan menerima recurring.cycle.created webhook saat siklus berikutnya dibuat.

recurring.cycle.created

Retrying

Jika upaya pertama gagal dan paket memiliki konfigurasi coba lagi, Anda akan menerima webhook. recurring.cycle.retrying Ini menunjukkan percobaan ulang sedang berlangsung hingga selesai.

recurring.cycle.retrying

Succeeded

Pembayaran siklus berhasil. Anda akan menerima webhook recurring.cycle.succeeded. Anda akan mendapatkan action_id di dalam webhook sebagai pengidentifikasi pembayaran. Anda dapat menggunakan ini untuk proses pengembalian dana jika diperlukan.

recurring.cycle.succeeded

Failed

Pembayaran siklus gagal. Anda akan menerima webhook recurring.cycle.failed, yang menunjukkan semua percobaan ulang telah dieksekusi tanpa hasil.

recurring.cycle.failed