Mulai

Test mode

Test integrasi Anda tanpa memindahkan uang sungguhan.

API key test membuat permintaan pembayaran yang tampilan dan perilakunya sama seperti yang asli — field sama, biaya sama, webhook sama — tapi tidak ada uang sungguhan yang berpindah.

Test key

Selain key live, Anda bisa punya satu test key, berawalan kp_test_. Rotasi dan cabut di Pengaturan → Developer, persis seperti key live — satu key aktif per mode. Dashboard menampilkan satu environment dalam satu waktu: pindah ke Sandbox untuk melihat test key, Live untuk key live. Dipakai di header yang sama:

Authorization: Bearer kp_test_...

Mode key menentukan mode semua yang dibuatnya. Tidak ada field yang perlu diisi atau dikonfigurasi — create dengan kp_test_ menghasilkan objek test; create dengan kp_live_ menghasilkan objek live. Setiap key hanya bisa melihat mode-nya sendiri: test key tidak akan pernah bisa retrieve atau list permintaan pembayaran live, dan sebaliknya.

Objek test

Setiap response /v1 dan setiap webhook membawa livemode false untuk objek test, true untuk yang live. Halaman checkout pembayaran test menampilkan badge test yang jelas, dan yang diberikan ke pembeli sengaja dibuat dummy yang tidak bisa dipakai: QR yang ditolak semua e-wallet, dan nomor Virtual Account yang tidak bisa ditransfer. Memang begitu seharusnya — pembayaran test tidak boleh bisa dibayar sungguhan.

curl https://pay.kasera.id/v1/transactions \
  -H "Authorization: Bearer kp_test_..." \
  -H "Idempotency-Key: test-order-1234" \
  -H "Content-Type: application/json" \
  -d '{ "amount": 150000, "description": "Kaos komunitas" }'

Mengatur hasil pembayaran

Pembayaran test tidak pernah terkonfirmasi sendiri — Anda yang menentukan hasilnya. Ambil token dari checkout_url di response create (bagian setelah /p/) lalu kirim hasil yang Anda mau:

curl -X POST https://pay.kasera.id/api/v1/checkout/{token}/simulate-payment \
  -H "Content-Type: application/json" \
  -d '{ "outcome": "succeeded" }'
curl -X POST https://pay.kasera.id/api/v1/checkout/{token}/simulate-payment \
  -H "Content-Type: application/json" \
  -d '{ "outcome": "expired" }'

Body kosong berarti succeeded. Nilai lain ditolak 422 invalid_outcome. Endpoint ini diotorisasi oleh token checkout itu sendiri — tanpa API key. Kalau dipanggil untuk pembayaran live, jawabannya 404, sama seperti token yang tidak ada.

Kartu di test mode

Pembayaran kartu live me-redirect pembeli ke halaman kartu (payment.redirect_url), tempat mereka mengisi data kartu dan melewati 3-D Secure, lalu mengembalikannya ke Anda. Di test mode tidak ada yang sampai ke processor kartu, jadi redirect_url adalah halaman Kasera Pay Checkout untuk pembayaran itu, dan langkah kartunya berupa form kartu test: nomor, masa berlaku, CVV, nama — divalidasi di browser dan tidak pernah dikirim ke mana pun. Hanya test card di bawah yang diterima; tiap nomor menghasilkan satu hasil tertentu, jadi semua skenario bisa dicoba.

HasilMastercardVISA
Lunas (3DS)5573 3810 1111 11014617 0069 1111 1106
Lunas (tanpa 3DS)5573 3810 1111 11354617 0069 1111 1130
Ditolak processor (3DS)5573 3810 1111 11194617 0069 1111 1114
Ditolak processor (tanpa 3DS)5573 3810 1111 12004617 0069 1111 1213
Ditolak bank (3DS)5573 3810 1111 11274617 0069 1111 1122
Ditolak bank (tanpa 3DS)5573 3810 1111 12264617 0069 1111 1221

Masa berlaku 01/31 (bulan mana pun di masa depan bisa), CVV 123 (tiga digit apa pun), nama bebas. Kartu bertanda 3DS menampilkan langkah OTP dulu; kodenya tertulis di langkah itu (123456) dan hanya kode itu yang lolos. Kartu yang ditolak membuat pembayaran tetap pending dan pembeli boleh coba kartu lain — kartu yang ditolak bukan berarti pembayarannya gagal, baik di test mode maupun live.

Test card yang lunas memicu webhook payment.paid yang sama seperti kartu sungguhan, pembeli diteruskan ke return_url Anda, dan refund test lewat POST /v1/refunds berhasil tanpa menyentuh processor.

Webhook

Hasil succeeded memicu pengiriman payment.paid yang nyata dan ber-signature — ke endpoint test, dengan signing secret test. Endpoint live dan test terpisah dan diatur di mode dashboard masing-masing, jadi siapkan dulu endpoint test di mode Sandbox sebelum menunggu kiriman. Verifikasi signature-nya persis seperti event live.

Cek livemode sebelum memproses pesanan. Selain itu, event test sama persis dengan event live — dan memang itu tujuannya.

Yang tidak tersentuh test mode

Pembayaran test dikecualikan dari semua alur uang: pencairan, saldo Anda, laporan pendapatan, rekonsiliasi, dan jatah sebelum verifikasi — create test tidak memakai jatah itu dan tidak juga ditolak olehnya. Pembayaran test juga tidak pernah mengirim email atau push notification ke pembeli maupun merchant; hanya webhook developer yang terkirim.

Go live

Ganti kp_test_ dengan kp_live_. Tidak ada lagi yang berubah. Kedua mode tidak berbagi data pembayaran — termasuk idempotency key — jadi key yang dipakai integrasi Anda di test mode masih terhitung baru di mode live: request live pertama Anda membuat pembayaran live, bukan replay dari yang tes.