Tutorial 17 Jul 2026 15 Kali Dibaca

Cara Menghubungkan Laravel dengan Payment Gateway Midtrans

Gugun Nurdiansyah
Penulis
Cara Menghubungkan Laravel dengan Payment Gateway Midtrans

Salah satu Payment Gateway paling populer di Indonesia adalah Midtrans. Midtrans menyediakan API yang mudah diintegrasikan dengan berbagai framework, termasuk Laravel. Pada artikel ini Anda akan mempelajari cara menghubungkan Laravel dengan Midtrans mulai dari proses instalasi, konfigurasi, pembuatan transaksi, hingga menerima notifikasi pembayaran secara otomatis.

Apa Itu Midtrans?

Midtrans merupakan layanan Payment Gateway asal Indonesia yang memudahkan developer maupun perusahaan dalam menerima pembayaran secara online.

Beberapa metode pembayaran yang didukung antara lain:

  • QRIS

  • GoPay

  • ShopeePay

  • Virtual Account (BCA, BNI, BRI, Mandiri, CIMB, Permata, dll.)

  • Transfer Bank

  • Credit Card

  • Indomaret

  • Alfamart

  • Akulaku

  • Kredivo

Dengan satu integrasi, aplikasi Laravel Anda sudah dapat menerima berbagai jenis pembayaran.

Persiapan Sebelum Integrasi

Sebelum memulai, pastikan Anda telah memiliki:

  • Laravel 10, 11, 12, atau versi terbaru

  • PHP 8.1 atau lebih tinggi

  • Composer

  • Akun Midtrans Sandbox

  • Database MySQL atau PostgreSQL

  • SSL untuk mode Production

Untuk tahap pengembangan, gunakan terlebih dahulu akun Sandbox sehingga transaksi tidak menggunakan uang asli.

Membuat Akun Midtrans

Daftarkan akun pada dashboard Midtrans.

Setelah login, buka menu:

Settings → Access Keys

Di sana Anda akan mendapatkan:

  • Merchant ID

  • Server Key

  • Client Key

Ketiga informasi tersebut akan digunakan pada aplikasi Laravel.

Install Library Midtrans

Masuk ke folder project Laravel kemudian jalankan:

composer require midtrans/midtrans-php

Setelah proses selesai, library Midtrans siap digunakan.

Menambahkan Konfigurasi pada File .env

Tambahkan konfigurasi berikut:

MIDTRANS_SERVER_KEY=SB-Mid-server-xxxxxxxxxxxx
MIDTRANS_CLIENT_KEY=SB-Mid-client-xxxxxxxxxxxx
MIDTRANS_IS_PRODUCTION=false
MIDTRANS_IS_SANITIZED=true
MIDTRANS_IS_3DS=true

Saat aplikasi sudah live, ubah:

MIDTRANS_IS_PRODUCTION=true

dan gunakan Server Key Production.

Membuat File Konfigurasi Midtrans

Buat file:

config/midtrans.php

Isi dengan konfigurasi berikut:

return [

    'server_key' => env('MIDTRANS_SERVER_KEY'),

    'client_key' => env('MIDTRANS_CLIENT_KEY'),

    'is_production' => env('MIDTRANS_IS_PRODUCTION', false),

    'is_sanitized' => env('MIDTRANS_IS_SANITIZED', true),

    'is_3ds' => env('MIDTRANS_IS_3DS', true),

];

Dengan cara ini konfigurasi akan lebih rapi dan mudah dikelola.

Membuat Controller Pembayaran

Misalnya membuat controller:

php artisan make:controller PaymentController

Kemudian pada constructor lakukan konfigurasi Midtrans.

Config::$serverKey = config('midtrans.server_key');

Config::$isProduction = config('midtrans.is_production');

Config::$isSanitized = config('midtrans.is_sanitized');

Config::$is3ds = config('midtrans.is_3ds');

Konfigurasi ini hanya perlu dilakukan satu kali.

Membuat Data Transaksi

Misalkan pelanggan membeli produk.

$params = [

    'transaction_details' => [

        'order_id' => 'INV-10001',

        'gross_amount' => 250000,

    ],

    'customer_details' => [

        'first_name' => 'Budi',

        'email' => 'budi@email.com',

        'phone' => '08123456789',

    ]

];

Data tersebut nantinya dikirim ke Midtrans untuk membuat transaksi.

Membuat Snap Token

Selanjutnya buat Snap Token.

$snapToken = Snap::getSnapToken($params);

Token ini nantinya dikirim ke halaman pembayaran.

Menampilkan Halaman Pembayaran

Pada Blade cukup tambahkan JavaScript Midtrans.

<script src="https://app.sandbox.midtrans.com/snap/snap.js"
data-client-key="{{ config('midtrans.client_key') }}">
</script>

Kemudian jalankan popup pembayaran.

snap.pay(token);

Setelah tombol pembayaran diklik, pelanggan akan diarahkan ke halaman pembayaran Midtrans.

Menyimpan Data Order Terlebih Dahulu

Sebelum membuat Snap Token, sebaiknya simpan data pesanan ke database.

Contoh struktur tabel:

  • id

  • invoice_number

  • user_id

  • total

  • payment_status

  • payment_method

  • transaction_id

  • created_at

Status awal dapat berupa:

Pending

Jangan langsung mengubah status menjadi "Paid" sebelum menerima notifikasi dari Midtrans.

Membuat Callback Notification

Midtrans akan mengirimkan notifikasi setiap kali pembayaran berubah.

Misalnya:

  • Pending

  • Settlement

  • Capture

  • Deny

  • Expire

  • Cancel

Buat route:

Route::post('/midtrans/callback', [PaymentController::class,'callback']);

Kemudian lakukan pengecekan status transaksi.

Jika status:

settlement

maka ubah pembayaran menjadi:

Paid

Jika:

expire

ubah menjadi:

Expired

Jika:

cancel

ubah menjadi:

Cancelled

Dengan sistem callback, data pembayaran akan selalu sinkron secara otomatis.

Mengubah Status Pesanan Otomatis

Contoh alur bisnis:

  1. Pelanggan membuat pesanan.

  2. Status pesanan menjadi Menunggu Pembayaran.

  3. Midtrans mengirim notifikasi pembayaran berhasil.

  4. Laravel mengubah status menjadi Lunas.

  5. Admin memproses pengiriman.

  6. Barang dikirim ke pelanggan.

Alur seperti ini jauh lebih aman dibanding hanya mengandalkan redirect setelah pembayaran selesai.

Mode Sandbox dan Production

Midtrans menyediakan dua mode.

Sandbox

Digunakan untuk testing.

Semua pembayaran hanyalah simulasi.

Production

Digunakan ketika website sudah online.

Transaksi menggunakan uang asli.

Pastikan sebelum berpindah ke Production Anda mengganti:

  • Server Key

  • Client Key

  • URL JavaScript

  • Endpoint Callback

Tips Keamanan

Agar integrasi berjalan aman, lakukan beberapa hal berikut:

  • Jangan menyimpan Server Key di dalam source code.

  • Gunakan file .env.

  • Selalu aktifkan HTTPS.

  • Verifikasi Signature Key pada callback.

  • Validasi nominal pembayaran.

  • Gunakan Order ID yang unik.

  • Simpan seluruh log transaksi.

Langkah-langkah tersebut akan membantu mencegah manipulasi data pembayaran.

Integrasi dengan Laravel E-Commerce

Midtrans sangat cocok digunakan pada berbagai jenis aplikasi Laravel seperti:

  • Website Toko Online

  • Marketplace

  • Sistem Booking Hotel

  • Booking Klinik

  • Aplikasi Rental

  • Sistem Membership

  • Aplikasi Kursus Online

  • SaaS (Software as a Service)

  • Point of Sale (POS)

  • ERP

  • CRM

  • Sistem Donasi

  • Sistem Pembayaran Tagihan

Karena mendukung banyak metode pembayaran, pengguna tidak perlu berpindah ke layanan lain untuk menyelesaikan transaksi.

Kesimpulan

Menghubungkan Laravel dengan Payment Gateway Midtrans merupakan langkah penting dalam membangun aplikasi yang profesional dan siap digunakan secara komersial. Proses integrasinya relatif mudah berkat SDK resmi yang disediakan Midtrans, serta dukungan dokumentasi yang lengkap.

Dengan menerapkan konfigurasi yang benar, membuat Snap Token, menyimpan data transaksi, serta memanfaatkan callback notification, Anda dapat membangun sistem pembayaran yang aman, otomatis, dan mudah dikelola. Pendekatan ini cocok diterapkan pada berbagai jenis aplikasi, mulai dari toko online, marketplace, hingga platform SaaS yang membutuhkan proses pembayaran digital secara real-time.

#Laravel #Midtrans #Payment Gateway #Laravel Midtrans #Integrasi Midtrans Laravel #Snap Midtrans #Midtrans API #Laravel E-Commerce #Sistem Pembayaran Online #Payment Gateway Indonesia #Laravel Tutorial #PHP Laravel #Midtrans Sandbox #Midtrans Production #Virtual Account #QRIS #GoPay #ShopeePay #Website Toko Online #SaaS Laravel
Beranda Produk Artikel
Konsultasi
OVLA

Navigasi Utama

Hubungi Kami

Mulai Konsultasi Sekarang