Lewati ke konten

Tulisan · Integrasi

Integrasi payment gateway ke website: lima hal yang harus dijaga.

Menyambungkan payment gateway ke website terlihat sederhana: pasang tombol bayar, terima uang. Masalahnya baru muncul di hari ramai. Pembayaran sudah lunas tetapi pesanan masih “menunggu”, satu pesanan tercatat dua kali, atau saldo tidak cocok dengan laporan. Ini lima hal yang saya jaga, dengan contoh dari toko online yang saya kerjakan.

Oleh Asep Jaenudin SutarjiTerbit Baca 4 menit

Ringkasnya

  • Integrasi pembayaran bukan soal tombol bayar, melainkan soal apa yang terjadi ketika ada yang gagal di tengah jalan.
  • Lima hal yang dijaga: permintaan yang terulang, pemberitahuan yang datang dua kali atau tidak datang, keaslian pemberitahuan, pesanan yang tersangkut, dan pencocokan dengan saldo.
  • Uji jalur gagalnya, bukan hanya jalur mulusnya.
  • Tanyakan kepada pembuat sistem Anda: apa yang terjadi bila tombol bayar ditekan dua kali, dan bila pemberitahuan pembayaran tidak pernah datang?

Cara kerja pembayaran online, singkatnya

Payment gateway adalah perantara antara website Anda dan bank atau dompet digital pembeli. Alurnya tiga langkah. Website membuat tagihan di payment gateway. Pembeli membayar di halaman milik payment gateway. Lalu payment gateway memberi tahu website bahwa tagihan itu sudah dibayar. Pemberitahuan terakhir itu disebut webhook.

Ketiganya terjadi di tiga tempat berbeda, lewat jaringan yang bisa putus kapan saja. Hampir semua masalah integrasi pembayaran lahir dari satu pertanyaan: apa yang terjadi bila salah satu langkah itu terulang, terlambat, atau tidak sampai?

Contoh di tulisan ini berasal dari toko online Yoora Sarah, yang pembayarannya memakai Xendit.

1. Tombol bayar ditekan dua kali

Pembeli menekan “Bayar”, layar terasa lambat, lalu ia menekan lagi. Tanpa penjagaan, website membuat dua pesanan dan dua tagihan. Pembeli membayar salah satunya, dan tim Anda harus mencari mana yang asli.

Penjagaannya disebut kunci idempotensi: setiap percobaan checkout membawa satu kunci unik, dan permintaan dengan kunci yang sama hanya diproses sekali. Di toko online Yoora Sarah, menekan tombol bayar berkali-kali tidak pernah membuat pesanan ganda.

2. Pemberitahuan datang dua kali, atau tidak datang

Payment gateway umumnya mengirim ulang webhook bila website tidak menjawab tepat waktu. Artinya pemberitahuan yang sama bisa tiba dua kali. Bila setiap pemberitahuan langsung diproses, stok bisa berkurang dua kali untuk satu pesanan.

Kebalikannya juga terjadi: pembayaran berhasil, tetapi webhook-nya tidak pernah sampai, misalnya karena jaringan terputus. Pembeli sudah membayar, sementara pesanannya tetap berstatus menunggu pembayaran.

Keduanya dijaga dengan sikap yang sama: webhook diperlakukan sebagai petunjuk, bukan satu-satunya sumber kebenaran. Pemberitahuan yang terulang tidak boleh diproses dua kali, dan untuk yang tidak pernah datang harus ada jalan kedua — pembayaran dicocokkan ulang dengan catatan di payment gateway.

3. Pemberitahuan palsu

Alamat webhook adalah pintu yang terbuka ke internet. Siapa pun yang mengetahuinya bisa mencoba mengirim pesan “tagihan ini sudah lunas”. Karena itu setiap webhook harus diperiksa keasliannya sebelum dipercaya. Di backend Yoora Sarah, tanda tangan webhook diverifikasi, dan pembatasan laju permintaan berlaku lintas instance server.

4. Pesanan yang tersangkut di tengah

Tidak semua pembeli menyelesaikan pembayaran saat itu juga. Ada yang menutup tab, ada yang kehabisan waktu di halaman bank. Pesanan seperti itu butuh dua hal: batas waktu yang jelas, dan jalan kembali.

Di toko online Yoora Sarah, pesanan yang belum dibayar punya hitung mundur dan jalan kembali ke halaman pembayaran. Untuk kasus sebaliknya — sudah dibayar tetapi tersangkut — tersedia alat pemulihan.

5. Uang di sistem harus sama dengan uang di saldo

Di akhir hari pertanyaannya sederhana: apakah jumlah pesanan lunas di sistem sama dengan uang yang benar-benar masuk? Mencocokkan keduanya disebut rekonsiliasi. Tanpa itu, selisih kecil bisa menumpuk lama sebelum ada yang menyadarinya.

Di Yoora Sarah, pembayaran direkonsiliasi dengan Xendit dan saldonya punya buku besar sendiri. Pengembalian dana berjalan berantai — CS mengajukan, gudang memeriksa, finance mengeksekusi — sampai dananya dicairkan lewat Xendit.

Uji jalur gagalnya, bukan hanya jalur mulusnya

Semua integrasi tampak berhasil ketika diuji dengan satu pembayaran yang lancar. Yang membedakan adalah skenario gagal: jaringan putus setelah pembeli membayar, webhook ganda, dua admin menekan tombol yang sama, pembayaran yang tertunda.

Di backend Yoora Sarah, jalur yang menyangkut uang dan stok memakai transaksi database dan penguncian baris. Uji integrasinya berjalan terhadap PostgreSQL dan Redis sungguhan, bagian dari 2.404 fungsi test otomatis. Perubahan dirilis bertahap — 10%, lalu 50%, lalu 100% — dan ditarik kembali otomatis bila tingkat galat naik.

Lima pertanyaan untuk pembuat sistem Anda

  1. Apa yang terjadi bila pembeli menekan tombol bayar dua kali?
  2. Apa yang terjadi bila pemberitahuan pembayaran datang dua kali?
  3. Apa yang terjadi bila pemberitahuan itu tidak pernah datang?
  4. Bagaimana sistem memastikan pemberitahuan benar-benar berasal dari payment gateway?
  5. Bagaimana uang di sistem dicocokkan dengan uang di saldo, dan siapa yang mengerjakannya?

Bila jawabannya “itu jarang terjadi”, berarti belum dijaga. Hal yang jarang terjadi pada sepuluh pesanan akan rutin terjadi pada sepuluh ribu pesanan.

Pembayaran hanya satu dari banyak sambungan

Prinsip yang sama berlaku untuk kurir, marketplace, dan WhatsApp: setiap sambungan bisa terlambat, terulang, atau gagal. Di Yoora Sarah, pembayaran, pengiriman, percakapan pelanggan, iklan, dan marketplace masuk ke backend yang sama, sehingga satu pesanan punya satu riwayat.

Menyambungkan layanan-layanan itu supaya uang dan stok tetap benar adalah pekerjaan integrasi sistem yang saya kerjakan. Bila yang Anda butuhkan adalah tokonya sekaligus, lihat jasa pembuatan toko online.

Penulis

Asep Jaenudin Sutarji — pendiri Sutarji Co, konsultan IT dan software engineer di Cianjur. Lewat Sutarji Co, saya membantu perusahaan dan UMKM memetakan masalahnya, memilih solusi yang tepat, lalu membangun sistemnya sampai berjalan. Tentang penulis

Layanan

Butuh ini dikerjakan untuk bisnis Anda?

Semua layanan
  1. 01

    Sistem yang saling tersambung Jasa integrasi sistem & API

    Pembayaran, kurir, marketplace, dan iklan terhubung ke satu sumber data, sehingga tidak perlu diketik ulang di banyak tempat.

    BuktiAPI Yoora Sarah

Tulisan lain

Lanjut membaca.

Semua tulisan
  1. Konsultasi IT

    Digitalisasi UMKM: mulai dari mana?

    Baca 5 menit

    Digitalisasi tidak dimulai dari aplikasi. Enam langkah: petakan masalah, pilih antara merapikan, menyambungkan, atau membangun, lalu kerjakan bertahap.

  2. Aplikasi web

    Aplikasi offline-first: tetap jalan tanpa internet.

    Baca 5 menit

    Sopir, kasir, dan petugas lapangan sering bekerja tanpa sinyal. Cara kerja aplikasi offline-first: catat di perangkat, lalu terkirim tanpa data dobel.

  3. Toko online

    Toko online sendiri atau marketplace?

    Baca 4 menit

    Marketplace memberi pembeli, toko online sendiri memberi kendali. Kapan cukup satu, kapan butuh keduanya, dan cara menjalankannya dengan satu stok.

02Kontak

Ingin bisnis Anda tumbuh? Ceritakan dulu kondisinya.

Tidak perlu dokumen rapi atau istilah teknis. Cukup ceritakan tujuan Anda dan apa yang paling merepotkan hari ini — dari situ kita lihat langkah teknologi mana yang paling masuk akal.

Kabupaten Cianjur, Jawa Barat · WIB (UTC+7)

Berbasis di Cianjur dan melayani klien di seluruh Indonesia. Untuk klien di luar Cianjur, pertemuan langsung tetap bisa diatur.

Brief kilat · 30 detik

Saya ingin dibantu soal…
Kondisi saat ini

Pratinjau pesan

Halo Sutarji Co, Saya ingin berdiskusi tentang bisnis saya.

Tidak ada data yang disimpan di situs ini. Pesan baru terkirim setelah Anda menekan kirim di aplikasi Anda sendiri.

Diskusikan bisnis Anda