Cara Membuat QR Code untuk Verifikasi Invoice Laravel
Apa Itu QR Code Verifikasi Invoice?
QR Code verifikasi invoice adalah kode yang dapat dipindai menggunakan kamera smartphone untuk membuka halaman verifikasi invoice.
Contoh alurnya:
Invoice PDF
↓
QR Code
↓
Scan dengan Smartphone
↓
Halaman Verifikasi
↓
Invoice Valid / Tidak Valid
Informasi yang dapat ditampilkan:
Nomor invoice.
Tanggal invoice.
Nama pelanggan.
Total transaksi.
Status pembayaran.
Waktu verifikasi.
Install Library QR Code
Salah satu package yang dapat digunakan adalah Simple QR Code.
Install menggunakan Composer:
composer require simplesoftwareio/simple-qrcode
Kemudian QR Code dapat dibuat dari URL verifikasi invoice.
Membuat Route Verifikasi
Tambahkan route:
Route::get(
'/invoice/{invoice}/verify',
[InvoiceController::class, 'verify']
)->name('invoice.verify');
Contohnya, invoice dengan ID 125 memiliki URL:
https://example.com/invoice/125/verify
Namun, untuk keamanan sebaiknya jangan menggunakan ID database secara langsung sebagai kode verifikasi.
Gunakan Token Verifikasi
Tambahkan kolom token pada tabel invoice:
$table->string('verification_token')
->unique();
Kemudian buat token ketika invoice dibuat:
use Illuminate\Support\Str;
$invoice = Invoice::create([
'invoice_number' => $invoiceNumber,
'customer_id' => $request->customer_id,
'verification_token' => Str::random(64),
'invoice_date' => now(),
'total' => $request->total,
]);
Contoh URL:
https://example.com/invoice/verify/8f72a9...
Token tersebut digunakan sebagai identitas publik invoice.
Membuat Halaman Verifikasi
Pada controller:
public function verify(string $token)
{
$invoice = Invoice::where(
'verification_token',
$token
)->first();
if (!$invoice) {
return view(
'invoices.invalid'
);
}
return view(
'invoices.verify',
compact('invoice')
);
}
Jika token ditemukan, invoice dianggap valid.
Membuat QR Code
Pada halaman atau template invoice:
use SimpleSoftwareIO\QrCode\Facades\QrCode;
Kemudian:
{!! QrCode::size(120)->generate(
route(
'invoice.verify',
$invoice->verification_token
)
) !!}
QR Code tersebut akan berisi URL verifikasi.
Menampilkan QR Code pada PDF
Jika invoice dibuat menjadi PDF, QR Code dapat ditempatkan pada bagian bawah invoice.
Contohnya:
<div class="verification">
<p>
Scan QR Code untuk verifikasi invoice
</p>
{!! QrCode::size(100)->generate(
route(
'invoice.verify',
$invoice->verification_token
)
) !!}
</div>
Hasilnya kira-kira:
┌─────────────────────────────┐
│ INVOICE │
│ │
│ No: INV/2026/08/000001 │
│ Total: Rp1.500.000 │
│ │
│ [ QR CODE ] │
│ │
│ Scan untuk verifikasi │
└─────────────────────────────┘
Membuat Halaman Invoice Valid
Contoh Blade:
<h1>Invoice Valid</h1>
<p>
Nomor Invoice:
{{ $invoice->invoice_number }}
</p>
<p>
Tanggal:
{{ $invoice->invoice_date->format('d/m/Y') }}
</p>
<p>
Total:
Rp {{ number_format(
$invoice->total,
0,
',',
'.'
) }}
</p>
<p>
Status:
{{ strtoupper($invoice->status) }}
</p>
Halaman tersebut dapat dibuat lebih sederhana agar pelanggan langsung mengetahui bahwa invoice berhasil diverifikasi.
Jika Invoice Tidak Valid
Buat:
resources/views/invoices/invalid.blade.php
Contohnya:
<h1>Invoice Tidak Ditemukan</h1>
<p>
Nomor invoice tidak dapat diverifikasi.
</p>
<p>
Silakan hubungi pihak penerbit invoice.
</p>
Jangan menampilkan informasi database atau error internal kepada pengguna.
Tambahkan Status Pembayaran
Halaman verifikasi dapat menampilkan:
Invoice : INV/2026/08/000001
Tanggal : 23/08/2026
Total : Rp1.500.000
Status : LUNAS
Status dapat dibuat berdasarkan field:
$invoice->status
Contohnya:
UNPAID
PAID
CANCELLED
EXPIRED
Dengan demikian QR Code tidak hanya memverifikasi keberadaan invoice, tetapi juga membantu pelanggan mengetahui status dokumen tersebut.
Jangan Masukkan Data Sensitif ke QR Code
Hindari memasukkan data seperti:
NIK
Nomor rekening
Password
Token pembayaran
Data kartu
Data pribadi lengkap
QR Code cukup berisi URL verifikasi atau identifier acak.
Contohnya:
https://example.com/verify/8f72a9...
Data invoice kemudian diambil dari server.
Tambahkan Signature untuk Keamanan
Untuk sistem dengan kebutuhan keamanan lebih tinggi, URL verifikasi dapat menggunakan signed URL atau token acak yang tidak mudah ditebak.
Laravel menyediakan signed URL untuk memastikan URL tidak dimodifikasi tanpa terdeteksi.
Contohnya:
URL::signedRoute(
'invoice.verify',
[
'invoice' => $invoice->id,
]
);
Pada route:
Route::get(
'/invoice/{invoice}/verify',
[InvoiceController::class, 'verify']
)->name('invoice.verify')
->middleware('signed');
Pendekatan ini dapat menjadi lapisan keamanan tambahan.
QR Code untuk Invoice yang Sudah Dibatalkan
Invoice yang dibatalkan tetap dapat ditemukan, tetapi statusnya harus ditampilkan dengan jelas.
Contohnya:
Invoice: INV/2026/08/000001
Status:
DIBATALKAN
Invoice ini tidak lagi berlaku.
Jangan menghapus data invoice hanya karena statusnya dibatalkan jika sistem membutuhkan riwayat transaksi.
QR Code untuk Invoice Lunas
Untuk invoice yang sudah dibayar:
✓ INVOICE VALID
Nomor:
INV/2026/08/000001
Status:
LUNAS
Total:
Rp1.500.000
Informasi tersebut membantu pelanggan atau pihak lain melakukan pengecekan tanpa harus meminta dokumen tambahan.
Contoh Alur Lengkap
Pelanggan melakukan transaksi
↓
Laravel membuat invoice
↓
Generate nomor invoice
↓
Generate verification token
↓
Simpan invoice
↓
Generate QR Code
↓
QR Code dimasukkan ke PDF
↓
Invoice dikirim ke pelanggan
↓
Pelanggan melakukan scan
↓
Laravel memeriksa token
↓
Tampilkan status invoice
Fitur Tambahan yang Bisa Dibuat
Sistem verifikasi dapat dikembangkan dengan:
QR Code invoice.
Nomor invoice otomatis.
Status pembayaran realtime.
Digital signature.
Timestamp verifikasi.
Link download invoice.
Cetak ulang invoice.
Riwayat perubahan status.
Payment gateway.
WhatsApp invoice.
Untuk sistem multi-cabang, QR Code juga dapat menampilkan informasi cabang penerbit invoice.
Kesalahan yang Perlu Dihindari
Menggunakan ID Database sebagai QR Code
ID seperti:
/invoice/125
lebih mudah ditebak.
Gunakan token acak atau signed URL.
Menyimpan Data Invoice di QR Code
QR Code sebaiknya berisi URL verifikasi, bukan seluruh informasi transaksi.
Tidak Menggunakan HTTPS
Halaman verifikasi invoice sebaiknya menggunakan HTTPS untuk melindungi komunikasi antara perangkat pelanggan dan server.
Tidak Memeriksa Status Invoice
Invoice yang dibatalkan atau expired tetap dapat ditemukan, tetapi statusnya harus ditampilkan dengan benar.
Membuka Data Sensitif
Tampilkan informasi yang diperlukan untuk verifikasi saja.
QR Code Invoice Bersama Ovla Media
Ovla Media dapat membantu mengembangkan sistem invoice dan verifikasi digital untuk:
Invoice PDF.
QR Code verification.
Digital signature.
Payment gateway.
QRIS.
WhatsApp invoice.
Sistem multi-cabang.
Point of Sales.
Sistem billing.
Aplikasi bisnis custom.
Sistem dapat dibuat agar pelanggan cukup melakukan scan QR Code untuk memastikan invoice benar-benar diterbitkan oleh perusahaan dan mengetahui status pembayarannya.
Kesimpulan
QR Code dapat menjadi bagian penting dari sistem verifikasi invoice Laravel.
Konsep sederhananya:
Invoice
↓
QR Code
↓
URL Verifikasi
↓
Token
↓
Database
↓
Status Invoice
QR Code sebaiknya hanya menyimpan URL atau token verifikasi, sementara informasi invoice tetap diambil dari database.
Dengan pendekatan ini, bisnis dapat membuat invoice PDF yang lebih profesional sekaligus menyediakan mekanisme verifikasi yang mudah digunakan oleh pelanggan.
Butuh implementasi untuk kebutuhan bisnis?
OVLA Media membantu pengembangan dan optimasi aplikasi web, integrasi sistem, serta solusi Laravel sesuai kebutuhan perusahaan Anda.
Artikel Terkait
Cara Membuat Invoice PDF Laravel dengan Nomor Otomatis
Invoice PDF dapat dibuat secara otomatis menggunakan Laravel untuk menghasilkan dokumen tagihan yang rapi dan mudah dikirim kepada pelanggan. Nomor invoice juga dapat dibuat secara otomatis berdasarkan transaksi sehingga setiap invoice memiliki identitas yang unik dan mudah dilacak
Cara Membuat Sinkronisasi Stok Antar-Aplikasi Menggunakan Laravel API
Sinkronisasi stok antar-aplikasi memungkinkan jumlah persediaan tetap konsisten antara sistem seperti POS, inventory, marketplace, dan gudang. Laravel API dapat digunakan untuk mengirim perubahan stok secara otomatis sehingga setiap aplikasi memiliki informasi persediaan yang lebih akurat.
Cara Membatasi Percobaan Login Menggunakan Rate Limiting Laravel
Rate limiting pada Laravel dapat digunakan untuk membatasi jumlah percobaan login dalam periode tertentu. Fitur ini membantu mengurangi risiko brute-force dengan menolak sementara permintaan login yang terlalu banyak dari pengguna atau alamat IP yang sama.