Panduan Langganan Jumlah Tetap

Contoh Layanan Video Streaming

Sebagai contoh, kami akan berpura-pura menjadi layanan streaming video yang ingin mengumpulkan pembayaran langganan dari pelanggan mereka.

  • 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/ diinisiasi 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 sebulan sekali pada tanggal pertama kali pelanggan mendaftar
    • Pelanggan harus melakukan satu pembayaran di muka
    • Untuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin melakukan percobaan ulang saat pelanggan memiliki saldo lagi
    • Untuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin memberi tahu pelanggan melalui Whatsapp saat pembayaran gagal
    • Jika pelanggan gagal melakukan pembayaran selama sebulan, kami akan menghentikan layanan mereka
  • Kami dapat memulai integrasi dengan menautkan aliran pembayaran ke API Xendit. API pertama adalah Buat Pelanggan tempat kami akan meneruskan informasi kontak pelanggan ke dalam rencana. Ini membantu untuk menyimpan informasi kontak dengan Xendit sehingga notifikasi Whatsapp dapat terkirim. Kami dapat memberikan informasi berdasarkan input pengguna selama pendaftaran atau membuat formulir bagi pengguna 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,3]
  },
  "immediate_action_type": "FULL_AMOUNT",
  "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:

ParameterKebutuhan
interval, interval_count, anchor_datePembayaran dilakukan sebulan sekali pada tanggal pertama kali pelanggan mendaftar
immediate_action_typePelanggan harus membayar di muka saat pertama kali
retry_interval, retry_interval_count, total_retryUntuk memaksimalkan tingkat keberhasilan, kami akan melakukan percobaan kembali saat pelanggan memiliki saldo lagi
notification_configUntuk memaksimalkan tingkat keberhasilan pembayaran, kami ingin memberi tahu pelanggan melalui Whatsapp saat pembayaran gagal
failed_cycle_actionJika pelanggan gagal melakukan pembayaran selama sebulan, kami akan menghentikan layanan 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 mengarahkan pelanggan ke actions.url agar mereka dapat menyelesaikan penautan akun metode pembayaran. Setelah pelanggan kita arahkan, kita perlu menerima webhook dari Xendit untuk melanjutkan ke langkah berikutnya.

  • Jika event webhook untuk recurring.plan.activated diterima, kami akan mencocokkannya dengan reference_id atau id yang disimpan di database kami untuk memastikan bahwa ini adalah event untuk rencana yang baru saja kami buat. Setelah dikonfirmasi, kami dapat mulai memberikan layanan kepada pelanggan. Jika recurring.plan.inactivated diterima, kami dapat meminta pelanggan untuk mencoba kembali alur langganan.
  • Pada saat yang sama, event webhook recurring.cycle.succeeded untuk pembayaran segera akan diterima. Webhook ini berisi detail tentang pembayaran langsung yang dilakukan.
  • Terakhir, event webhook recurring.cycle.created juga akan diterima untuk tindakan pembayaran berulang bulan mendatang. Dalam kasus penggunaan ini, adalah opsional untuk menangani webhook ini.
  • Untuk bulan-bulan berikutnya, jika pembayaran berhasil, event webhook recurring.cycle.succeeded akan diterima. Jika event webhook recurring.cycle.retrying diterima, berarti pembayaran gagal tetapi Xendit akan tetap melanjutkan percobaan. Jika event webhook recurring.cycle.failed diterima, kami akan menghentikan layanan pelanggan karena semua upaya pembayaran termasuk percobaan ulang telah gagal.

Last Updated on 2023-05-24