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

1.0.4 2025-09-09 03:50 UTC

This package is auto-updated.

Last update: 2025-10-09 04:57:44 UTC


README

Latest Stable Version Total Downloads License: MIT

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:

  1. Fork repository ini
  2. Buat branch untuk fitur baru (git checkout -b feature/amazing-feature)
  3. Commit perubahan (git commit -m 'Add amazing feature')
  4. Push ke branch (git push origin feature/amazing-feature)
  5. Buat Pull Request

📞 Support & Bantuan

📄 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 🇮🇩