Back to blog
Backend

Idempotency Key: Kenapa Tombol 'Bayar Sekarang' Gak Boleh Diklik Dua Kali?

Sinyal internet Budi lemot. Dia klik 'Bayar Sekarang', loading lama, lalu iseng klik sekali lagi. Ternyata saldonya terpotong DUA KALI untuk satu pesanan yang sama!

super admin·01 September 2026·2 min read
Idempotency Key: Kenapa Tombol 'Bayar Sekarang' Gak Boleh Diklik Dua Kali?
Article Content

Bayangin Budi Checkout di Sinyal Lemot...

Bayangin Budi belanja online, total belanjaannya Rp150.000. Dia klik tombol "Bayar Sekarang". Karena sinyalnya E (Edge), loading-nya lama sekali. Budi mengira tombolnya gagal terklik, jadi ia klik sekali lagi.

Beberapa menit kemudian, notifikasi bank masuk dua kali: saldonya terpotong Rp150.000, DUA KALI, untuk satu pesanan yang sama! Ternyata klik pertama Budi sebenarnya berhasil terkirim ke Server, cuma balasannya yang lambat sampai ke HP-nya. Server yang menerima dua request terpisah, ya diproses dua-duanya — sah-sah saja menurut logikanya.

Masalahnya: Server Tidak Tahu Ini 'Niat yang Sama'

Bagi Server, dua klik Budi terlihat seperti dua perintah pembayaran yang benar-benar berbeda. Tidak ada bedanya secara teknis antara "Budi klik dua kali karena panik" dengan "Budi memang niat bayar dua pesanan berbeda". Masalah ini makin parah kalau kegagalan jaringan membuat Frontend otomatis mengirim ulang (retry) request yang gagal — berpotensi memicu pembayaran ganda tanpa Budi sadari sama sekali.

Nah, Di Sinilah 'Idempotency Key' Masuk!

Idempotency Key adalah sebuah kode unik (biasanya UUID) yang dibuat oleh Frontend satu kali saja pada saat tombol "Bayar" pertama kali diklik, lalu disertakan di setiap percobaan request pembayaran untuk transaksi itu — termasuk saat di-retry.

  1. Saat klik pertama, Frontend membuat kunci: idem-a1b2c3d4, lalu mengirim request pembayaran beserta kunci itu.
  2. Server menerima, dan sebelum memproses apapun, ia mengecek: "Apakah kunci idem-a1b2c3d4 ini pernah saya proses sebelumnya?" Kalau belum, Server memprosesnya seperti biasa dan menyimpan hasilnya sambil menempelkan kunci tadi.
  3. Saat klik kedua Budi (atau retry otomatis) datang dengan kunci yang sama persis, Server langsung berkata: "Oh, transaksi ini sudah pernah saya proses. Ini saya kembalikan hasil yang SAMA seperti sebelumnya, tanpa memotong saldo lagi."

Intinya: Idempotency Key membuat sebuah operasi bisa diulang berkali-kali tanpa efek samping tambahan — sekali dieksekusi atau seratus kali dieksekusi, hasilnya tetap satu. Ini alasan kenapa Payment Gateway serius seperti Duitku, Midtrans, atau Stripe selalu mewajibkan parameter unik semacam ini di setiap permintaan transaksi.

Mau langsung pakai template?

Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.

Browse Templates