Payment Link menyediakan solusi sederhana dan low-code untuk pembayaran satu kali. Pelanggan Anda dapat menyelesaikan pembayaran mereka di halaman checkout yang dihosting Xendit, sehingga Anda tidak perlu membuat halaman checkout dan memproses pembayaran. Konfirmasi pembayaran dikirim ke webhook Anda untuk penanganan lebih lanjut, seperti memperbarui status pesanan Anda.

Cara integrasi
1. Buat Link Pembayaran
Saat pengguna akhir siap untuk checkout, server Anda mengirimkan permintaan ke Xendit untuk membuat Link Pembayaran menggunakan titik akhir dan muatan berikut:
Request - POST /v2/invoices {
"external_id": "payment-link-example",
"amount": 510000,
"description": "Air Conditioner purchase",
"invoice_duration": 86400,
"customer": {
"given_names": "John",
"surname": "Doe",
"email": "johndoe@example.com",
"mobile_number": "+6287774441111"
},
"success_redirect_url": "https://www.google.com",
"failure_redirect_url": "https://www.google.com",
"currency": "IDR",
"items": [
{
"name": "Air Conditioner",
"quantity": 1,
"price": 100000,
"category": "Electronic",
"url": "https://yourcompany.com/example_item"
}
],
"metadata": {
"store_branch": "Jakarta"
}
}
| Response - POST /v2/invoices {
"id": "6748105a77f16ebe0cc583a7",
"external_id": "payment-link-example",
"user_id": "62440e322008e87fb29c1fd0",
"status": "PENDING",
"merchant_name": "Your Business Name",
"merchant_profile_picture_url": "https://xnd-merchant-logos.s3.amazonaws.com/business/production/62440e322008e87fb29c1fd0-1721897916022.jpeg",
"amount": 510000,
"description": "Air Conditioner purchase",
"expiry_date": "2024-11-29T06:40:26.353Z",
"invoice_url": "https://checkout-staging.xendit.co/web/6748105a77f16ebe0cc583a7",
"available_banks": [
{
"bank_code": "BNI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "YOUR BUSINESS NAME",
"identity_amount": 0
},
{
"bank_code": "MANDIRI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "YOUR BUSINESS NAME",
"identity_amount": 0
},
{
"bank_code": "PERMATA",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "YOUR BUSINESS NAME",
"identity_amount": 0
},
{
"bank_code": "BRI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "YOUR BUSINESS NAME",
"identity_amount": 0
},
{
"bank_code": "BCA",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "YOUR BUSINESS NAME",
"identity_amount": 0
}
],
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART"
},
{
"retail_outlet_name": "INDOMARET"
}
],
"available_ewallets": [
{
"ewallet_type": "OVO"
},
{
"ewallet_type": "DANA"
},
{
"ewallet_type": "SHOPEEPAY"
},
{
"ewallet_type": "LINKAJA"
},
{
"ewallet_type": "ASTRAPAY"
},
{
"ewallet_type": "NEXCASH"
},
{
"ewallet_type": "JENIUSPAY"
}
],
"available_qr_codes": [
{
"qr_code_type": "QRIS"
}
],
"available_direct_debits": [
{
"direct_debit_type": "DD_BRI"
},
{
"direct_debit_type": "DD_MANDIRI"
}
],
"available_paylaters": [],
"should_exclude_credit_card": true,
"should_send_email": false,
"success_redirect_url": "https://www.google.com",
"failure_redirect_url": "https://www.google.com",
"created": "2024-11-28T06:40:26.508Z",
"updated": "2024-11-28T06:40:26.508Z",
"currency": "IDR",
"items": [
{
"name": "Air Conditioner",
"quantity": 1,
"price": 100000,
"category": "Electronic",
"url": "https://yourcompany.com/example_item"
}
],
"customer": {
"given_names": "John",
"surname": "Doe",
"email": "johndoe@example.com",
"mobile_number": "+6287774441111"
},
"metadata": {
"store_branch": "Jakarta"
}
}
|
---|
2. Arahkan pengguna akhir ke halaman yang dihosting Xendit
Gunakan invoice_url
respons dari untuk mengarahkan pelanggan ke halaman checkout yang dihosting Xendit.
3. Pengguna akhir menyelesaikan pembayaran
Pengguna akhir menyelesaikan pembayaran di halaman yang dihosting Xendit. Jika pembayaran berhasil, mereka akan dialihkan ke success_redirect_url
. Jika gagal, mereka dapat mencoba pembayaran lagi di halaman pembayaran yang sama.
Xendit memberikan pesan kesalahan yang jelas di halaman yang dihosting Xendit untuk memandu pengguna akhir.
4. Terima webhook
Ketika pembayaran selesai, Xendit mengirimkan webhook ke titik akhir yang Anda konfigurasikan.
{
"id": "6748105a77f16ebe0cc583a7",
"items": [
{
"url": "https://yourcompany.com/example_item",
"name": "Air Conditioner",
"price": 100000,
"category": "Electronic",
"quantity": 1
}
],
"amount": 510000,
"status": "PAID",
"created": "2024-11-28T06:40:26.508Z",
"is_high": false,
"paid_at": "2024-11-28T06:41:29.776Z",
"updated": "2024-11-28T06:41:34.702Z",
"user_id": "62440e322008e87fb29c1fd0",
"currency": "IDR",
"payment_id": "ewc_99013716-9354-439e-9fea-e61a06e87ea3",
"description": "Air Conditioner purchase",
"external_id": "payment-link-example",
"paid_amount": 510000,
"ewallet_type": "DANA",
"merchant_name": "Your Business Name",
"payment_method": "EWALLET",
"payment_channel": "DANA",
"payment_method_id": "pm-8a1e1cc3-b67c-4951-bc1e-470bc94ad816",
"failure_redirect_url": "https://www.google.com",
"success_redirect_url": "https://www.google.com"
}
Lifecycle Link Pembayaran

Berikut adalah tabel yang merangkum status dan deskripsinya untuk lifecycle Link Pembayaran:
Status | Deskripsi |
---|
Pending | Status Link Pembayaran akan menjadi PENDING setelah dibuat. Status akan tetap PENDING hingga transaksi berhasil diselesaikan, kedaluwarsa (berdasarkan invoice_duration ), atau kedaluwarsa secara manual. |
Paid | Status berubah menjadi PAID saat pembayaran berhasil diselesaikan. Jika pengguna gagal selama proses, mereka dapat mencoba lagi dalam Link Pembayaran yang sama. Selama status ini, Anda akan menerima webhook faktur dengan status PAID . |
Expired | Status berubah menjadi EXPIRED saat invoice_duration Link Pembayaran tercapai atau Anda akan kedaluwarsa secara manual. Pengguna akhir tidak akan lagi memiliki akses ke invoice_url . Selama status ini, Anda akan menerima webhook faktur untuk mengidentifikasi transisi status. Link Pembayaran yang kedaluwarsa tidak dapat diaktifkan kembali. |