Lewati ke konten utama

Integrasi Midtrans Snap: Bagian yang Tidak Ada di Dokumentasi

Mustaf

07 Agustus 2026

1 menit baca · 574 kali dibaca
Integrasi Midtrans Snap: Bagian yang Tidak Ada di Dokumentasi

Membuat Snap token itu bagian mudahnya. Masalah muncul setelah pembayaran masuk.

1. Verifikasi signature itu wajib, bukan opsional

Endpoint webhook Anda terbuka ke internet. Tanpa verifikasi, siapa pun bisa mengirim POST berisi "status: settlement" dan mendapatkan produk gratis.

$expected = hash('sha512',
    $payload['order_id']
    . $payload['status_code']
    . $payload['gross_amount']
    . config('midtrans.server_key')
);

if (! hash_equals($expected, $payload['signature_key'])) {
    abort(403);
}

Gunakan hash_equals, bukan ===, agar perbandingan berjalan dalam waktu konstan.

2. Cocokkan nominal dengan data Anda sendiri

Signature valid membuktikan payload datang dari Midtrans, tapi tetap bandingkan gross_amount dengan total order di database Anda sebelum meluluskan pesanan.

3. capture belum tentu lunas

Untuk kartu kredit, status capture harus dibaca bersama fraud_status. Hanya accept yang berarti lunas; challenge harus tetap pending sampai Anda memutuskan secara manual.

4. Webhook bisa datang berkali-kali

Midtrans mengirim ulang notifikasi kalau server Anda lambat merespons. Handler Anda harus idempoten: kalau order sudah berstatus lunas, langsung kembalikan 200 tanpa menerbitkan lisensi kedua.

5. Siapkan jaring pengaman rekonsiliasi

Webhook bisa gagal — server restart, deploy, atau jaringan. Jadwalkan perintah berkala yang memeriksa ulang status order pending langsung ke API Midtrans. Ini menyelamatkan pesanan yang kalau tidak akan hilang begitu saja.

#midtrans #payment gateway #laravel

Butuh implementasinya di bisnis Anda?

Kami bantu dari analisa sampai deployment.

Request Project