Mengembangkan aplikasi e-commerce atau platform SaaS di tahun 2026 menuntut standar keamanan dan kenyamanan pengguna yang sangat tinggi. Salah satu aspek krusial yang menentukan keberhasilan bisnis digital adalah sistem pembayaran yang mulus. Jika Anda sedang membangun aplikasi menggunakan stack modern, maka tutorial integrasi payment gateway midtrans laravel react 2026 ini adalah panduan komprehensif yang Anda butuhkan untuk menghadirkan fitur transaksi otomatis, aman, dan terpercaya.
Daftar Isi
- Mengapa Midtrans, Laravel, dan React di Tahun 2026?
- Persiapan Lingkungan Pengembangan (Prerequisites)
- Langkah 1: Konfigurasi Akun Midtrans Sandbox
- Langkah 2: Setup Backend Laravel dan Library Midtrans
- Langkah 3: Implementasi Frontend React (Snap JS)
- Langkah 4: Menangani Notifikasi (Webhook) untuk Update Status
- Best Practices Keamanan dan Optimasi
- Kesimpulan dan Langkah Selanjutnya
Mengapa Midtrans, Laravel, dan React di Tahun 2026?
Di tahun 2026, ekosistem pengembangan web telah berevolusi menjadi lebih modular. Laravel tetap menjadi pilihan utama untuk backend karena stabilitas dan fitur keamanannya yang matang, sementara React mendominasi sisi frontend dengan performa yang responsif. Menggabungkan keduanya dengan Midtrans—payment gateway terbesar di Indonesia—adalah keputusan strategis bagi pengembang.
Midtrans menawarkan berbagai metode pembayaran mulai dari Virtual Account, E-Wallet (GoPay, OVO, ShopeePay), hingga Kartu Kredit. Dengan mengikuti tutorial integrasi payment gateway midtrans laravel react 2026 ini, Anda tidak hanya belajar cara menghubungkan API, tetapi juga cara mengelola siklus hidup transaksi secara profesional.
Persiapan Lingkungan Pengembangan (Prerequisites)
Sebelum memulai proses coding, pastikan perangkat lokal Anda sudah terinstall teknologi berikut:
- PHP 8.3+: Versi terbaru untuk performa backend maksimal.
- Laravel 11/12: Framework PHP paling populer.
- Node.js & NPM: Untuk menjalankan React 19+.
- Composer: Dependency manager untuk PHP.
- Database: MySQL atau PostgreSQL.
Pastikan juga Anda sudah memiliki akun di Midtrans Dashboard. Untuk tahap pengembangan, kita akan menggunakan mode Sandbox (lingkungan uji coba).
Langkah 1: Konfigurasi Akun Midtrans Sandbox
Langkah pertama dalam tutorial integrasi payment gateway midtrans laravel react 2026 adalah mendapatkan API Keys. Masuk ke dashboard Midtrans, lalu arahkan ke menu Settings > Access Keys.
Anda akan menemukan tiga kunci utama:
- Client Key: Digunakan di sisi frontend (React).
- Server Key: Digunakan di sisi backend (Laravel) untuk otentikasi API.
- Merchant ID: Identitas unik toko Anda.
Simpan ketiga kunci ini di file .env proyek Laravel Anda nanti.
Langkah 2: Setup Backend Laravel dan Library Midtrans
Buka terminal Anda dan buat proyek Laravel baru jika belum ada. Kemudian, install library resmi Midtrans untuk PHP menggunakan Composer:
composer require midtrans/midtrans-php
Konfigurasi Environment
Tambahkan kredensial Midtrans ke file .env:
MIDTRANS_SERVER_KEY=your-server-key
MIDTRANS_CLIENT_KEY=your-client-key
MIDTRANS_IS_PRODUCTION=false
MIDTRANS_IS_SANITIZED=true
MIDTRANS_IS_3DS=true
Membuat Controller Pembayaran
Buatlah controller baru bernama PaymentController. Controller ini akan bertanggung jawab untuk membuat Snap Token yang akan dikirim ke frontend React.
namespace AppHttpControllers;
use IlluminateHttpRequest;
use MidtransConfig;
use MidtransSnap;
class PaymentController extends Controller
{
public function createToken(Request $request)
{
// Konfigurasi Midtrans
Config::$serverKey = env('MIDTRANS_SERVER_KEY');
Config::$isProduction = env('MIDTRANS_IS_PRODUCTION');
Config::$isSanitized = env('MIDTRANS_IS_SANITIZED');
Config::$is3ds = env('MIDTRANS_IS_3DS');
$params = [
'transaction_details' => [
'order_id' => 'ORDER-' . uniqid(),
'gross_amount' => $request->amount,
],
'customer_details' => [
'first_name' => $request->user_name,
'email' => $request->user_email,
],
];
$snapToken = Snap::getSnapToken($params);
return response()->json(['snap_token' => $snapToken]);
}
}
Langkah 3: Implementasi Frontend React (Snap JS)
Pada sisi frontend, kita perlu memuat script Snap.js dari server Midtrans. Dalam tutorial integrasi payment gateway midtrans laravel react 2026 ini, kita akan menggunakan hook useEffect untuk memastikan script dimuat dengan benar.
Membuat Komponen Pembayaran
Berikut adalah contoh komponen React untuk menangani proses checkout:
import React, { useState, useEffect } from 'react';
import axios from 'axios';
const Checkout = () => {
const [token, setToken] = useState('');
useEffect(() => {
const midtransScriptUrl = "https://app.sandbox.midtrans.com/snap/snap.js";
const myMidtransClientKey = "YOUR_CLIENT_KEY";
let scriptTag = document.createElement('script');
scriptTag.src = midtransScriptUrl;
scriptTag.setAttribute('data-client-key', myMidtransClientKey);
document.body.appendChild(scriptTag);
return () => {
document.body.removeChild(scriptTag);
};
}, []);
const handlePayment = async () => {
const response = await axios.post('/api/payment/token', {
amount: 150000,
user_name: 'Budi Santoso',
user_email: '[email protected]'
});
window.snap.pay(response.data.snap_token, {
onSuccess: function(result) { console.log('success', result); },
onPending: function(result) { console.log('pending', result); },
onError: function(result) { console.log('error', result); },
onClose: function() { console.log('customer closed the popup'); }
});
};
return (
<div>
<h2>Checkout Produk</h2>
<button onClick={handlePayment}>Bayar Sekarang</button>
</div>
);
};
export default Checkout;
Langkah 4: Menangani Notifikasi (Webhook) untuk Update Status
Salah satu kesalahan fatal dalam integrasi payment gateway adalah hanya bergantung pada callback frontend. Callback frontend bisa dimanipulasi atau gagal jika user menutup browser terlalu cepat. Solusinya adalah Webhook.
Midtrans akan mengirimkan request POST ke server Laravel Anda setiap kali status transaksi berubah (misal: dari pending ke settlement).
Membuat Endpoint Webhook
Di api.php, tambahkan route:
Route::post('/midtrans/callback', [PaymentController::class, 'handleNotification']);
Pastikan untuk mengecualikan route ini dari proteksi CSRF di bootstrap/app.php (untuk Laravel 11/12) atau middleware VerifyCsrfToken.
Logika Verifikasi Webhook
public function handleNotification(Request $request)
{
$payload = $request->getContent();
$notification = json_decode($payload);
$validSignatureKey = hash("sha512", $notification->order_id . $notification->status_code . $notification->gross_amount . env('MIDTRANS_SERVER_KEY'));
if ($notification->signature_key !== $validSignatureKey) {
return response()->json(['message' => 'Invalid signature'], 403);
}
// Update database berdasarkan status
$order = Order::where('order_id', $notification->order_id)->first();
if ($notification->transaction_status == 'settlement') {
$order->update(['status' => 'paid']);
}
return response()->json(['status' => 'ok']);
}
Best Practices Keamanan dan Optimasi
Dalam tutorial integrasi payment gateway midtrans laravel react 2026 ini, kami menekankan beberapa poin penting untuk menjaga integritas sistem Anda:
- Idempotency: Pastikan sistem Anda dapat menangani notifikasi webhook yang sama berkali-kali tanpa menduplikasi data.
- Logging: Selalu catat log setiap request dari Midtrans untuk memudahkan debugging jika terjadi perselisihan transaksi.
- Environment Separation: Jangan pernah menggunakan Server Key produksi di lingkungan staging atau development.
- SSL/HTTPS: Webhook Midtrans mewajibkan endpoint Anda menggunakan HTTPS di lingkungan produksi.
Kesimpulan dan Langkah Selanjutnya
Integrasi Midtrans dengan Laravel dan React memberikan kombinasi yang sangat kuat untuk aplikasi modern. Dengan menggunakan Snap JS, Anda memberikan pengalaman pembayaran yang tidak mengalihkan pengguna dari situs Anda, sehingga meningkatkan conversion rate. Sementara itu, Laravel di backend memastikan semua data transaksi diproses secara aman dan tervalidasi.
Setelah mengikuti tutorial integrasi payment gateway midtrans laravel react 2026 ini, langkah selanjutnya adalah melakukan testing menyeluruh di lingkungan Sandbox menggunakan berbagai skenario (pembayaran berhasil, gagal, dan kedaluwarsa) sebelum beralih ke mode Production.
Jika Anda membutuhkan boilerplate code lengkap untuk proyek ini, silakan klik tombol di bawah ini:
Catatan: Pastikan Anda selalu merujuk pada dokumentasi resmi Midtrans jika terdapat pembaruan API di masa mendatang. Selamat mencoba!