kodinus / dynamicgen-qris
QRIS Generator & Parser (Dynamic & Static) untuk Laravel dan PHP, oleh PT Kodingin Digital Nusantara
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/kodinus/dynamicgen-qris
Requires
- php: >=8.0
- bacon/bacon-qr-code: ^3.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.0
README
Library PHP yang powerful untuk generate, parse, dan convert QRIS (Quick Response Code Indonesian Standard). Mengikuti standar EMVCo QR dengan spesifikasi QRIS Indonesia resmi dari Bank Indonesia.
🚀 Fitur Utama
- ✅ Generate QRIS - Static dan Dynamic
- 📖 Parse QRIS - Decode string QRIS ke data terstruktur
- 🔄 Convert - Ubah Static ke Dynamic QRIS
- 🛡️ Validasi CRC - Implementasi CRC16-CCITT-FALSE
- 📊 Ekstraksi Data - Extract informasi merchant lengkap
📦 Instalasi
composer require kodinus/dynamicgen-qris
Penggunaan di Laravel
Paket ini mendukung auto-discovery sehingga Anda bisa langsung memakai Facade Qris
atau dependency injection DynamicQRISGenerator
di dalam project Laravel Anda. Paket ini
kompatibel dengan Laravel 8.x hingga 11.x.
use Qris; // Facade $qris = Qris::generate($merchantData, 50000); $data = Qris::extractMerchant($qris);
🔧 Setup Awal
<?php require_once 'vendor/autoload.php'; use Kodinus\DynamicGenQris\DynamicQRISGenerator; $generator = new DynamicQRISGenerator();
📚 Dokumentasi Penggunaan
1. Generate Static QRIS
$merchantData = [ 'acquirer_domain' => 'COM.GO-JEK.WWW', 'mpan' => '936009143805979959', 'terminal_id' => 'G805979959', 'merchant_category' => 'UMI', 'nmid' => 'ID1024358806544', 'mcc' => '5411', 'merchant_name' => 'Kodingin Digital Nusantara', 'merchant_city' => 'NGAWI', 'postal_code' => '63281', ]; $staticQris = $generator->generate($merchantData); echo $staticQris;
2. Generate Dynamic QRIS
$amount = 50000; // Rp 50,000 $invoiceId = 'INV20250908001'; $merchantData['invoice_id'] = $invoiceId; $dynamicQris = $generator->generate($merchantData, $amount); echo $dynamicQris;
3. Parse QRIS String
$qrisString = "00020101021126610014COM..."; // QRIS string lengkap $parsedData = $generator->parse($qrisString); print_r($parsedData); // Output: Array berisi semua tag-value QRIS
4. Ekstraksi Data Merchant
$merchantInfo = $generator->extractMerchant($qrisString); print_r($merchantInfo); /* Output: Array ( [acquirer_domain] => COM.GO-JEK.WWW [mpan] => 936009143805979959 [merchant_name] => Kodingin Digital Nusantara [merchant_city] => NGAWI ... dst ) */
5. Convert Static ke Dynamic
$staticQris = "00020101021126610014COM..."; // Static QRIS $amount = 100000; // Rp 100,000 $newInvoice = 'INV20250908002'; $dynamicQris = $generator->convertToDynamic($staticQris, $amount, $newInvoice); echo $dynamicQris;
6. Validasi QRIS
$isValid = $generator->validateQris($qrisString); if ($isValid) { echo "✅ QRIS valid!"; } else { echo "❌ QRIS tidak valid!"; }
7. Cetak QR Code di Terminal
Untuk menampilkan QR Code langsung di terminal, instal terlebih dahulu dependensi tambahan:
composer require bacon/bacon-qr-code
Kemudian panggil metode printQrCode
baik melalui instance kelas maupun Facade:
// Menggunakan instance kelas $generator->printQrCode($dynamicQris); // Atau melalui Facade di Laravel Qris::printQrCode($dynamicQris);
Metode ini akan mencetak QR Code dalam bentuk teks ASCII ke terminal.
📋 Parameter Merchant Data
Pastikan parameter Merchant Data sesuai dengan hasil pembacaan QR Code yang ada dari QRIS milik anda.
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
acquirer_domain |
string | Ya | Domain acquirer/penyedia layanan | COM.GO-JEK.WWW |
mpan |
string | Ya | Merchant Primary Account Number | 936009143805979959 |
terminal_id |
string | Tidak | ID Terminal | G805979959 |
merchant_category |
string | Ya | Kategori: UMI/MID/Large | UMI |
nmid |
string | Ya | National Merchant ID | ID1024358806544 |
mcc |
string | Tidak | Merchant Category Code | 5411 |
merchant_name |
string | Ya | Nama merchant | Kodingin Digital Nusantara |
merchant_city |
string | Ya | Kota merchant | NGAWI |
postal_code |
string | Tidak | Kode pos | 63281 |
invoice_id |
string | Tidak | ID Invoice (untuk dynamic QRIS) | INV20250908001 |
🔑 Konstanta & Standar
Point of Initiation Method (PIM)
- Static QRIS:
12
- Dapat digunakan berkali-kali - Dynamic QRIS:
11
- Sekali pakai dengan nominal tetap
Standar Lainnya
- Currency Code:
360
(Indonesian Rupiah) - Country Code:
ID
(Indonesia) - Switching Domain:
ID.CO.QRIS.WWW
🛡️ Keamanan & Validasi
Library ini mengimplementasikan:
- CRC16-CCITT-FALSE untuk validasi integritas data
- Format standar EMVCo QR Code
- Spesifikasi QRIS Indonesia dari Bank Indonesia
- Validasi struktur dan format data merchant
📁 Struktur Project
kodinus/dynamicgen-qris/
├── src/
│ ├── DynamicQRISGenerator.php # Class utama
│ ├── Facades/
│ │ └── Qris.php # Laravel Facade
│ └── QrisServiceProvider.php # Laravel Service Provider
├── composer.json
├── README.md
└── LICENSE
🔗 Framework Integration
Laravel
// config/app.php 'providers' => [ Kodinus\DynamicGenQris\QrisServiceProvider::class, ], // Hanya untuk Laravel 10 kebawah 'aliases' => [ 'Qris' => Kodinus\DynamicGenQris\Facades\Qris::class, ], // Usage use Qris; $qris = Qris::generate($merchantData, 50000);
⚠️ Penting untuk Diperhatikan
Disclaimer: Library ini dibuat untuk keperluan pembelajaran, riset, dan development.
Tidak Tersedia:
- ❌ Fitur checking mutasi/callback transaksi
- ❌ Integrasi langsung dengan Payment Service Provider (PSP)
- ❌ Sistem notifikasi pembayaran real-time
Untuk Produksi:
- ✅ Gunakan QRIS resmi dari bank/PSP terpercaya
- ✅ Implementasikan sistem monitoring transaksi
- ✅ Lakukan testing menyeluruh sebelum deploy
- ✅ Patuhi regulasi Bank Indonesia terkait QRIS
🤝 Kontribusi
Kontribusi sangat welcome! Silakan:
- Fork repository ini
- Buat branch untuk fitur baru (
git checkout -b feature/amazing-feature
) - Commit perubahan (
git commit -m 'Add amazing feature'
) - Push ke branch (
git push origin feature/amazing-feature
) - Buat Pull Request
📞 Support & Bantuan
- 🐛 Bug Reports: GitHub Issues
- 💡 Feature Requests: GitHub Discussions
- 📧 Email: halo@kodinus.id
- 📱 Whatsapp: 081216446031⚠️ Hanya pesan teks aja, tidak melayani telfon untuk menghindari penipuan!
📄 Lisensi
Dilisensikan di bawah MIT License © 2025 PT Kodingin Digital Nusantara
💰 Dukung Kami Melalui Donasi
- Bank BSI: 7308120467 a/n PT Kodingin Digital Nusantara
Dibuat dengan ❤️ di Indonesia 🇮🇩