Standar EMVCo TLV & QRIS Indonesia

Generator & Konversi QRIS Statis ke Dinamis

Suntikkan nominal bayar dan biaya transaksi secara real-time ke payload QRIS standar Bank Indonesia & ASPI dengan generator visual modern beresolusi tinggi.

⚡ Real-time Debounced Input 🏷️ EMVCo TLV Standard 🔐 Auto CRC-16 CCITT 🎨 Kustomisasi Warna & Margin 📐 Output PNG & Vector SVG

Pengaturan Transaksi

Auto Update
Belum punya string? Scan gambar QRIS →

Sesuai standar QRIS, fee disisipkan pada Tag 55 & 56/57 dan dihitung otomatis oleh aplikasi perbankan.

Opsi Kustomisasi Visual QR Code ▲ Sembunyikan
300px
10px

Live Preview QRIS

Siap Scan
ULHEM
KENDALBank Neo Commerce
QRIS Dinamis
Memperbarui QR...
Rp 25.000
Unduh Gambar
Payload QRIS Dinamis (EMVCo):
00020101021226740025ID.CO.BANKNEOCOMMERCE.WWW011893600490594025951702120005600601850303UMI51550025ID.CO.BANKNEOCOMMERCE.WWW0215ID10232875503140303UMI5204541153033605802ID5905ULHEM6006KENDAL6105513556233052230017018004145344348160703T01540525000630410B6

Dekoder & Inspeksi Tag EMVCo QRIS

Hasil pembacaan struktur Tag-Length-Value (TLV) dari string QRIS dinamis yang sedang aktif.

CRC: Valid
Tag Deskripsi Tag EMVCo Panjang Nilai Data (Value)
00 Payload Format Indicator 2 01
01 Point of Initiation Method (11: Static, 12: Dynamic) 2 12
26 Merchant Account Information (National) 74 0025ID.CO.BANKNEOCOMMERCE.WWW011893600490594025951702120005600601850303UMI
51 Merchant Account Information (Domestic/Global) 55 0025ID.CO.BANKNEOCOMMERCE.WWW0215ID10232875503140303UMI
52 Merchant Category Code (MCC) 4 5411
53 Transaction Currency (360: IDR) 3 360
58 Country Code (ID) 2 ID
59 Merchant Name 5 ULHEM
60 Merchant City 6 KENDAL
61 Postal Code 5 51355
62 Additional Data Field Template 33 052230017018004145344348160703T01
54 Transaction Amount 5 25000
63 CRC Checksum (CRC-16 CCITT) 4 10B6

Contoh Kode & Integrasi Lengkap

Pilihan implementasi kode PHP mulai dari konversi instan 3 baris hingga kustomisasi visual lanjutan dan integrasi API.

Cara paling cepat dan ringkas untuk mengonversi QRIS statis menjadi dinamis dan merendernya ke HTML:

<?php
require_once __DIR__ . '/autoload.php';

use Fajsenug\Qris\QrisConverter;
use Fajsenug\Qris\QrRenderer;

$qrisStatis = '00020101021126740025ID.CO.BANKNEOCOMMERCE.WWW011893600490594025951702120005600601850303UMI51550025ID.CO.BANKNEOCOMMERCE.WWW0215ID10232875503140303UMI5204541153033605802ID5905ULHEM6006KENDAL6105513556233052230017018004145344348160703T0163043A5F';
$nominal = 25000; // Rp 25.000

// 1. Konversi payload ke dinamis (menyisipkan Tag 54 & hitung ulang CRC-16)
$qrisDinamis = QrisConverter::convert($qrisStatis, $nominal);

// 2. Dapatkan Data URI Base64 PNG siap pakai pada tag <img>
$base64Image = QrRenderer::toBase64($qrisDinamis, 300, 10, 'M');

// 3. Tampilkan di browser
echo '<img src="' . $base64Image . '" alt="QRIS Dinamis Rp 25.000">';

Menyisipkan biaya layanan (Convenience Fee Tag 56/57) dan menyimpan gambar langsung ke file server:

<?php
require_once __DIR__ . '/autoload.php';

use Fajsenug\Qris\QrisConverter;
use Fajsenug\Qris\QrRenderer;

$qrisStatis = '00020101021126740025ID.CO.BANKNEOCOMMERCE.WWW011893600490594025951702120005600601850303UMI51550025ID.CO.BANKNEOCOMMERCE.WWW0215ID10232875503140303UMI5204541153033605802ID5905ULHEM6006KENDAL6105513556233052230017018004145344348160703T0163043A5F';
$nominal = 150000;

// Opsi 1: Biaya Tetap Rp 2.500 (Tag 55=02 & Tag 56=2500)
$payloadTetap = QrisConverter::convert($qrisStatis, $nominal, [
    'fee_fixed' => 2500
]);

// Opsi 2: Biaya Persentase 0.7% (Tag 55=03 & Tag 57=0.70)
$payloadPersen = QrisConverter::convert($qrisStatis, $nominal, [
    'fee_percentage' => 0.7
]);

// Simpan gambar QR Code ke disk server
$filePath = __DIR__ . '/output_qris_150k.png';
QrRenderer::toFile($payloadTetap, $filePath, 350, 15, 'M');

echo "File berhasil disimpan di: " . $filePath;

Kustomisasi visual penuh (warna hex kustom, quiet zone margin, resolusi, vektor SVG, dan direct HTTP stream):

<?php
require_once __DIR__ . '/autoload.php';

use Fajsenug\Qris\QrisConverter;
use Fajsenug\Qris\QrRenderer;

$qrisStatis = '00020101021126740025ID.CO.BANKNEOCOMMERCE.WWW011893600490594025951702120005600601850303UMI51550025ID.CO.BANKNEOCOMMERCE.WWW0215ID10232875503140303UMI5204541153033605802ID5905ULHEM6006KENDAL6105513556233052230017018004145344348160703T0163043A5F';
$nominal = 500000;

// 1. Dapatkan string dinamis
$payload = QrisConverter::convert($qrisStatis, $nominal);

// 2. Render ke Vektor SVG Murni (Ultra tajam, tak terbatas resolusi)
$svgData = QrRenderer::toSvg($payload, 400, 15, 'H', '#0F172A', '#FFFFFF');

// 3. Dapatkan Data URI SVG siap pakai pada tag <img>
$svgDataUri = QrRenderer::toSvgDataUri($payload, 400, 15, 'H', '#0F172A', '#FFFFFF');

// 4. Atau Stream langsung sebagai Response Image PNG di Controller/API
// QrRenderer::streamPng($payload, 400, 15, 'M');
// exit;

Contoh pemanggilan endpoint REST API (api.php) menggunakan JavaScript Modern (Fetch API):

// Request POST JSON ke api.php
fetch('api.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    action: 'convert',
    qris: '00020101021126740025ID.CO.BANKNEOCOMMERCE.WWW011893600490594025951702120005600601850303UMI51550025ID.CO.BANKNEOCOMMERCE.WWW0215ID10232875503140303UMI5204541153033605802ID5905ULHEM6006KENDAL6105513556233052230017018004145344348160703T0163043A5F',
    amount: 75000,
    fee_fixed: 1000,       // Opsional
    qr_size: 350,          // Resolusi gambar
    qr_margin: 10,         // Margin quiet zone
    qr_ecc: 'M',           // Error correction level (L, M, Q, H)
    qr_fg: '#000000',      // Warna QR
    qr_bg: '#ffffff',      // Warna Background
    qr_format: 'png'       // Format output ('png' atau 'svg')
  })
})
.then(res => res.json())
.then(res => {
  if (res.status === 'success') {
    console.log('Payload Dinamis:', res.data.dynamic_payload);
    console.log('Merchant:', res.data.merchant.merchant_name);
    console.log('Total Bayar:', res.data.total_amount_formatted);
    
    // Pasang langsung ke elemen gambar
    document.getElementById('qr-img').src = res.data.qr_image;
  }
});

Penggunaan baris perintah terminal (CLI) untuk otomasi dan skrip batch:

# 1. Konversi instan dengan nominal Rp 50.000
php cli.php --amount=50000

# 2. Konversi dengan biaya tetap Rp 1.500 dan simpan gambar ke file PNG
php cli.php --amount=75000 --fee-fixed=1500 --output=invoice_75k.png

# 3. Konversi dengan biaya persentase 0.7%
php cli.php --amount=100000 --fee-percent=0.7

# 4. Parsing dan inspeksi rincian tag EMVCo TLV
php cli.php --parse --qris="00020101021126..."

Ekosistem Alat Pembayaran & Pemindai Kode

Koleksi aplikasi open-source pelengkap dari DAWN WEBDEV untuk integrasi pembayaran dan decoding kode batang.

Teks berhasil disalin!