Mengintegrasikan pembayaran dan menyimpan detail kartu dengan aman di halaman checkout Anda sangat mudah dengan alur "Bayar dan Simpan" kami. Hal ini memungkinkan pelanggan Anda untuk menyimpan informasi kartu mereka untuk transaksi di masa mendatang selama satu perjalanan pengguna akhir.
Alur pembayaran dan simpan (dengan autentikasi)
Buat sesi pembayaran
Request - POST /sesi
| Response - POST /sesi
|
---|
Kumpulkan informasi kartu
Buat card_session.js pada halaman Anda. Kumpulkan informasi kartu menggunakan
Xendit.payment.collectCardData(reqData, xenditResponseHandler)
. Ini akan mengumpulkan informasi kartu dan mengirimkannya ke Xendit menggunakan card_session.js.
Permintaan - untuk card_session_js
| response - dari card_session_js
|
---|
Penting: Simpan payment_request_id
karena Anda akan memerlukannya untuk mengambil status transaksi dan akan disertakan dalam webhook untuk pembaruan status.
Alihkan ke halaman autentikasi
Arahkan pelanggan ke halaman autentikasi menggunakan
action_url
objek from the response.Pelanggan menyelesaikan otentikasi
Setelah autentikasi berhasil , pelanggan Anda diarahkan ke
success_return_url
Jika autentikasi gagal, autentikasi tersebut dapat dialihkan kefailure_return_url
.Terima webhook
Xendit mengirimkan webhook pembayaran ke endpoint webhook Anda yang menunjukkan status akhir transaksi. Anda dapat mencocokkan webhook pembayaran dengan
payment_request_id.
Contoh webhook payment.capture
:
{
"created": "2024-12-18T05:46:35.109Z",
"business_id": "62440e322008e87fb29c1fd0",
"event": "payment.capture",
"data": {
"type": "PAY",
"status": "SUCCEEDED",
"country": "ID",
"created": "2024-12-18T05:46:08.192Z",
"updated": "2024-12-18T05:46:30.627Z",
"captures": [
{
"capture_id": "cptr-08f17fa3-e80c-4d8e-8c34-17aa3400bc1c",
"capture_amount": 10000,
"capture_timestamp": "2024-12-18T05:46:34.234Z"
}
],
"currency": "IDR",
"payment_id": "py-3f57d678-2448-4c9f-a433-8468d366fb5c",
"business_id": "62440e322008e87fb29c1fd0",
"customer_id": "cust-7de9a9b4-37e8-40ad-b665-d97f42e538c5",
"channel_code": "CARDS",
"reference_id": "97ba0a32-b996-4abf-8a7b-6184a6644676_b8d18f2f-3",
"capture_method": "AUTOMATIC",
"request_amount": 10000,
"payment_details": {
"authorization_data": {
"reconciliation_id": "7345007929096981703954",
"authorization_code": "831000",
"acquirer_merchant_id": "xendit_ctv_agg",
"network_response_code": "00",
"network_transaction_id": "016153570198200",
"cvn_verification_result": "M",
"retrieval_reference_number": "435205253972",
"address_verification_result": "M",
"network_response_code_descriptor": "Approved and completed sucessfully"
},
"authentication_data": {
"flow": "CHALLENGE",
"a_res": {
"eci": "05",
"message_version": "2.1.0",
"authentication_value": "AAIBBYNoEwAAACcKhAJkdQAAAAA=","directory_server_trans_id": "e537f539-d59f-4ebe-8d56-7fdc31a8e9b4"
}
}
},
"payment_request_id": "pr-5593127f-8c7b-4d2f-b487-c785ffc21e2f",
"payment_token_id": "pt-8983127f-98er-76dr-67er-d985gff21z2f"
},
"api_version": "v3"
}
Kami menyarankan untuk menyimpan payment_id
dan payment_details
dari webhook, yang berkorelasi dengan payment_request_id
, sebagai bukti pembayaran.
Bayar dan Simpan tanpa autentikasi
Kami sangat menyarankan Anda untuk melakukan autentikasi saat memproses transaksi kartu. Autentikasi tidak hanya memberikan liability shift (melindungi Anda dari sengketa penipuan tertentu), tetapi juga untuk memverifikasi identitas pengguna.
Namun, berdasarkan permintaan dan setelah penilaian berbasis resiko, Xendit dapat mengaktifkan guest checkout tanpa mewajibkan autentikasi. Kami akan melakukan penilaian berbasis risiko sebelum mengizinkan Anda menerima transaksi tanpa autentikasi.
Alur Bayar dan Simpan tanpa autentikasi
Buat payment session
Request - POST /sesi
| Response - POST /sesi
|
---|
Kumpulkan informasi kartu
Buat card_session.js pada halaman Anda. Collect the card information menggunakan
Xendit.payment.collectCardData(reqData, xenditResponseHandler)
. Ini akan mengumpulkan informasi kartu dan mengirimkannya ke Xendit menggunakan card_session.js.
Request - untuk card_session_js
| Response - dari card_session_js
|
---|
Penting: Simpan payment_request_id
untuk mengambil status transaksi nanti.
Terima webhook
Xendit mengirimkan webhook pembayaran ke endpoint webhook Anda yang menunjukkan status akhir transaksi. Anda dapat mencocokkan webhook pembayaran dengan
payment_request_id.
Contoh webhook payment.capture
:
{
"created": "2024-12-18T05:46:35.109Z",
"business_id": "62440e322008e87fb29c1fd0",
"event": "payment.capture",
"data": {
"type": "PAY",
"status": "SUCCEEDED",
"country": "ID",
"created": "2024-12-18T05:46:08.192Z",
"updated": "2024-12-18T05:46:30.627Z",
"captures": [
{
"capture_id": "cptr-08f17fa3-e80c-4d8e-8c34-17aa3400bc1c",
"capture_amount": 10000,
"capture_timestamp": "2024-12-18T05:46:34.234Z"
}
],
"currency": "IDR",
"payment_id": "py-3f57d678-2448-4c9f-a433-8468d366fb5c",
"business_id": "62440e322008e87fb29c1fd0",
"customer_id": "cust-7de9a9b4-37e8-40ad-b665-d97f42e538c5",
"channel_code": "CARDS",
"reference_id": "97ba0a32-b996-4abf-8a7b-6184a6644676_b8d18f2f-3",
"capture_method": "AUTOMATIC",
"request_amount": 10000,
"payment_details": {
"authorization_data": {
"reconciliation_id": "7345007929096981703954",
"authorization_code": "831000",
"acquirer_merchant_id": "xendit_ctv_agg",
"network_response_code": "00",
"network_transaction_id": "016153570198200",
"cvn_verification_result": "M",
"retrieval_reference_number": "435205253972",
"address_verification_result": "M",
"network_response_code_descriptor": "Approved and completed sucessfully"
},
"authentication_data": {
"flow": "CHALLENGE",
"a_res": {
"eci": "05",
"message_version": "2.1.0",
"authentication_value": "AAIBBYNoEwAAACcKhAJkdQAAAAA=","directory_server_trans_id": "e537f539-d59f-4ebe-8d56-7fdc31a8e9b4"
}
}
},
"payment_request_id": "pr-5593127f-8c7b-4d2f-b487-c785ffc21e2f",
"payment_token_id": "pt-8983127f-98er-76dr-67er-d985gff21z2f"
},
"api_version": "v3"
}
Kami sarankan untuk menyimpan payment_id
dan payment_details
dari webhook, yang berkorelasi dengan payment_request_id
, sebagai bukti pembayaran.
Dapatkan detail token pembayaran
Untuk mengambil detail token pembayaran yang disimpan, seperti masked_card_number
, gunakan endpoint berikut:
https://api.xendit.co/v3/payment_token/YOUR_PAYMENT_TOKEN_ID
Ini akan mengembalikan detail token pembayaran.
Response - dari payment_token
|
---|
Gunakan token pembayaran untuk transaksi di masa mendatang
Setelah token pembayaran dihasilkan, token ini bertindak sebagai referensi aman ke detail kartu yang disimpan pengguna akhir. Anda dapat menggunakan token ini untuk transaksi di masa mendatang, berdasarkan perjanjian persetujuan Anda dengan pengguna akhir.
Use case untuk token pembayaran:
Customer-Initiated Transactions (Returning Customers) - memungkinkan pengguna untuk menggunakan kartu yang disimpan dengan mulus untuk pembelian berikutnya. Untuk meningkatkan tingkat keberhasilan, sebaiknya minta pengguna untuk memasukkan kembali CVN mereka saat menyelesaikan transaksi. Lihat panduan integrasi
Merchant-Initiated Transactions (Recurring Payments) - Anda dapat memulai transaksi tanpa interaksi pengguna akhir (misalnya, untuk langganan atau debit otomatis). Ideal untuk layanan berbasis langganan, keanggotaan, dan penagihan otomatis. Lihat panduan integrasi