Panduan Langganan Berbasis Penggunaan
Contoh Layanan Utilitas
Untuk contoh ini, kami akan berpura-pura menjadi layanan utilitas yang ingin mengumpulkan berbagai pembayaran berulang dari pelanggan mereka setiap bulan.
- Pertama, kami perlu menentukan metode pembayaran yang cocok untuk pelanggan kami berdasarkan harga rata-rata. Karena harga untuk layanan dasar dan premium kami adalah sekitar IDR 100,000 hingga IDR 300,000, eWallet, Direct Debit, dan Kartu Kredit akan sesuai. Kami akan melanjutkan untuk mendaftarkan saluran-saluran ini dengan Xendit dan menentukan bahwa transaksi dapat untuk autodebit/ diinisais merchant.
- Sambil menunggu aktivasi saluran pembayaran, kami dapat melanjutkan pengujian. Untuk memulai pengujian, pertama-tama kami akan membuka Dasbor Xendit untuk membuat kunci API (Pengaturan > Pengembang > kunci API) dan menyediakan URL yang dihosting di server layanan streaming kami untuk menerima webhook pembayaran berulang dari Xendit (Pengaturan > Developer > Callbacks > RECURRING).
- Sekarang setelah persiapan selesai, kami dapat melihat use case kami dan mencocokkannya dengan fitur di API Xendit
- Pembayaran dilakukan di tanggal yang tetap setiap bulan
- Jumlah akan berubah setiap bulan berdasarkan penggunaan pelanggan
- Untuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin melakukan pembayaran ulang saat pelanggan memiliki saldo lagi
- Utilitas penting bagi pelanggan, kami akan memberi tahu mereka setiap kali proses pembayaran gagal
- Untuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin memberi tahu pelanggan melalui Whatsapp dan email ketika pembayaran gagal
- Jika pelanggan gagal melakukan pembayaran selama sebulan, kami akan menghentikan layanan mereka
- Ada jumlah dasar yang dibayar pelanggan terlepas dari penggunaan utilitas mereka
- Kami dapat memulai integrasi dengan menautkan metode pembayaran ke API Xendit. API pertama adalah Buat Pelanggan tempat kami akan meneruskan informasi kontak pelanggan ke dalam permintaan. Ini membantu untuk menyimpan informasi kontak dengan Xendit sehingga notifikasi Whatsapp dapat terkirim. Kami dapat memberikan informasi berdasarkan input pelangga selama pendaftaran atau membuat formulir bagi pelanggan untuk memasukkan data.
POST https://api.xendit.co/customers
{
"reference_id": "test_reference_id",
"mobile_number": "+6218181818181",
"email": "honeybadgey@xendit.co",
"type" : "INDIVIDUAL",
"individual_detail": {
"given_names": "Honey Badgey"
}
}
- Untuk menyederhanakan integrasi kami, kami akan menggunakan UI Xendit untuk pembuatan metode pembayaran. API berikutnya yang perlu kita tekan adalah Buat Rencana.
POST https://api.xendit.co/recurring
{
"reference_id": "test_reference_id",
"customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
"recurring_action": "PAYMENT",
"currency": "IDR",
"amount": 100000,
"schedule": {
"reference_id": "test_reference_id",
"interval": "MONTH",
"interval_count": 1,
"anchor_date": "2022-02-15T16:23:52Z",
"retry_interval": "DAY",
"retry_interval_count": 3,
"total_retry": 3,
"failed_attempt_notifications": [1,2,3]
},
"notification_config": {
"recurring_created": ["WHATSAPP"],
"recurring_succeeded": ["WHATSAPP"],
"recurring_failed": ["WHATSAPP"]
},
"failed_cycle_action": "STOP",
"metadata": null,
"success_return_url": "https://www.xendit.co/successisthesumoffailures",
"failure_return_url": "https://www.xendit.co/failureisthemotherofsuccess"
}
Parameter untuk kebutuhan use case ini:
Parameter | Kebutuhan |
---|---|
anchor_date | Pembayaran dilakukan pada tanggal tertentu dalam sebulan |
interval, interval_count | Pembayaran dilakukan setiap bulan |
retry_interval, retry_interval_count, total_retry | Untuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin melakukan pembayaran ulang ketika pelanggan memiliki saldo lagi |
failed_attempt_notifications | Utilitas penting bagi pelanggan, kami akan memberi tahu mereka setiap kali proses pembayaran gagal |
notification_config | Untuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin memberi tahu pelanggan melalui Whatsapp saat pembayaran gagal |
failed_cycle_action, failed_attempt_notifications | Jika pelanggan gagal melakukan pembayaran selama sebulan, kami akan menghentikan layanan mereka |
amount | Ada jumlah dasar yang dibayar pelanggan terlepas dari penggunaan utilitas mereka |
- Setelah permintaan dikirim, kami akan menerima respons HTTPS dengan objek rencana pembayaran berulang yang berstatus "REQUIRES_ACTION"
{
"id": "repl-239c16f4-866d-43e8-9341-7badafbc019f",
"reference_id": "test_reference_id",
"customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
"recurring_action": "PAYMENT",
"recurring_cycle_count": 0,
"currency": "IDR",
"amount": 100000,
"status": "REQUIRES_ACTION",
"created": "2020-11-20T16:23:52Z",
"updated": "2020-11-20T16:23:52Z",
"schedule_id": "resc-239c16f4-866d-43e8-9341-7badafbc019f",
"schedule": {
"reference_id": "test_reference_id",
"interval": "MONTH",
"interval_count": 1,
"created": "2022-02-15T16:23:52Z",
"updated": "2022-02-15T16:23:52Z",
"anchor_date": "2022-02-15T16:23:52Z",
"retry_interval": "DAY",
"retry_interval_count": 3,
"total_retry": 3,
"failed_attempt_notifications": [1,3]
},
"immediate_action_type": "FULL_AMOUNT",
"notification_config": {
"recurring_created": ["WHATSAPP"],
"recurring_succeeded": ["WHATSAPP"],
"recurring_failed": ["WHATSAPP",],
"locale": "en"
},
"failed_cycle_action": "STOP",
"metadata": null,
"description": null,
"items": null,
"actions": [{
"action": "AUTH",
"url": "https://linking-dev.xendit.co/pali_e53e1ca6-3c09-4026-be2e-95ed3d4bb25b",
"url_type": "WEB",
"method": "GET"
}],
"success_return_url": "https://www.xendit.co/successisthesumoffailures",
"failure_return_url": "https://www.xendit.co/failureisthemotherofsuccess"
}
Status "REQUIRES_ACTION" menunjukkan bahwa kami perlu mengalihkan pelanggan ke actions.url
agar mereka dapat menyelesaikan penautan akun metode pembayaran. Setelah pelanngan kita dialihkan, kita perlu mendengarkan webhook dari Xendit untuk melanjutkan ke langkah berikutnya.
- Jika event webhook untuk
recurring.plan.activated
diterima, kami akan mencocokkannya denganreference_id
atauid
yang disimpan di database kami untuk memvalidasi bahwa itu adalah event webhook yang terkait dengan rencana yang baru saja kami buat. Setelah dikonfirmasi, kami dapat mulai memberikan layanan kepada pelanggan. Jikarecurring.plan.inactivated
diterima, kami dapat meminta pelanggan untuk mencoba kembali alur langganan. - Pada saat yang sama, event webhook
recurring.cycle.created
juga akan diterima untuk siklus penagihan pengguna yang akan datang. Untuk langganan berbasis penggunaan, penting untuk menangani dan menyimpan informasi siklus berulang ini. Contoh webhook ada di bawah ini.
{
"created": "2022-10-01T12:37:08.251Z",
"business_id": "62440e322008e87fb29c1fd0",
"event": "recurring.cycle.created",
"data": {
"id": "recy-239c16f4-866d-43e8-9341-7badafbc019f",
"reference_id": "test_reference_id",
"customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
"recurring_action": "PAYMENT",
"type": "SCHEDULED",
"cycle_number": 1,
"attempt_count": 0,
"attempt_details": [],
"status": "SCHEDULED",
"scheduled_timestamp": "2020-12-20T16:23:52Z",
"created": "2020-11-20T16:23:52Z",
"updated": "2020-11-20T16:23:52Z",
"currency": "IDR",
"amount": 13579,
"metadata": null
},
"api_version": "v1"
}
- Ketika tiba waktunya untuk melakukan pengurangan tagihan pelanggan yang akan datang, kami akan memanggil endpoint Siklus Pembaruan untuk menyertakan biaya penggunaan layanan kami ke dalam jumlah yang akan dipotong. Karena pembaruan tidak dapat dilakukan setelah komponen tanggal dalam
scheduled_timestamp
("20-12-2020", waktu diabaikan) tercapai, kami harus memastikan bahwa pembaruan dilakukan setidaknya 1 hari sebelumschduled_timestamp
. Proses ini kemudian diulang untuk bulan-bulan berikutnya. - Untuk setiap bulan penagihan, jika pembayaran berhasil, event webhook
recurring.cycle.succeeded
akan diterima. Jika event webhookrecurring.cycle.retrying
diterima, berarti pembayaran gagal tetapi Xendit akan tetap melanjutkan percobaan. Jika event webhookrecurring.cycle.failed
diterima, kami akan menghentikan layanan pengguna karena semua upaya pembayaran termasuk percobaan ulang telah gagal.
Last Updated on 2023-05-24