Laravel package to generate VietQR codes for Vietnamese bank transfers (NAPAS/EMVCo standard)
takashato/laravel-vietqr is a Laravel package for laravel package to generate vietqr codes for vietnamese bank transfers (napas/emvco standard).
It currently has 4 GitHub stars and 47 downloads on Packagist (latest version v0.0.2).
Install it with composer require takashato/laravel-vietqr.
Discover more Laravel packages by takashato
or browse all Laravel packages to compare alternatives.
Last updated
Generate VietQR codes for Vietnamese bank transfers. Follows NAPAS VietQR v1.5.2 specification (EMVCo standard).
composer require takashato/laravel-vietqr
The package auto-registers via service provider.
use Takashato\VietQr\VietQrCode;
use Takashato\VietQr\Enums\Bank;
// Static QR - customer enters amount
$qr = VietQrCode::bankAccount(Bank::VIETCOMBANK, '0011012345678');
// Get QR string (for your own rendering)
$qrString = $qr->build();
// Generate SVG
$svg = $qr->generateQr('svg', 300);
// Generate Base64 PNG
$base64 = $qr->generateQrBase64('png', 300);
use Takashato\VietQr\VietQrCode;
use Takashato\VietQr\Enums\Bank;
// Dynamic QR - fixed amount of 180,000 VND
$qr = VietQrCode::bankAccount(
bank: Bank::TECHCOMBANK,
accountNumber: '19033123456789',
amount: 180000,
purpose: 'Thanh toan don hang #12345'
);
echo $qr->build();
use Takashato\VietQr\VietQrCode;
use Takashato\VietQr\Enums\Bank;
$qr = VietQrCode::bankCard(
bank: Bank::MB_BANK,
cardNumber: '9704229012345678',
amount: 50000
);
use Takashato\VietQr\VietQrCode;
use Takashato\VietQr\Data\MerchantInfo;
use Takashato\VietQr\Data\AdditionalInfo;
use Takashato\VietQr\Enums\Service;
$qr = (new VietQrCode())
->dynamicMethod()
->withMerchant(function (MerchantInfo $merchant) {
$merchant
->setService(Service::NAPAS_BY_ACCOUNT)
->setAcquirerId('970436') // Vietcombank BIN
->setMerchantId('0011012345678');
})
->amount(180000)
->withAdditionalInfo(function (AdditionalInfo $info) {
$info
->terminalLabel('POS001')
->purpose('Thanh toan don hang');
})
->build();
use Takashato\VietQr\Enums\Bank;
// Get bank BIN code
$bin = Bank::VIETCOMBANK->value; // '970436'
// Get bank names
$shortName = Bank::VIETCOMBANK->shortName(); // 'Vietcombank'
$fullName = Bank::VIETCOMBANK->nameVi(); // 'Ngân hàng TMCP Ngoại thương Việt Nam'
// Find bank by BIN
$bank = Bank::fromBin('970436'); // Bank::VIETCOMBANK
// Search banks
$results = Bank::search('viet'); // Returns matching Bank enums
use Takashato\VietQr\Facades\VietQr;
$qr = VietQr::create()
->staticMethod()
->withMerchant(...)
->build();
The Bank enum includes 50+ Vietnamese banks:
State-owned: Vietcombank, VietinBank, BIDV, Agribank
Joint-stock: Techcombank, MB Bank, ACB, VPBank, Sacombank, TPBank, HDBank, VIB, SHB, SCB, OCB, MSB, Eximbank, SeABank, LienVietPostBank, ABBank, and more...
Foreign branches: HSBC, Standard Chartered, Shinhan Bank, UOB, Woori Bank, CIMB, and more...
E-wallets: VNPT Money, CAKE, Ubank, Timo, TNEX
| Type | Method | Amount | Use Case |
|------|--------|--------|----------|
| Static | staticMethod() | Customer enters | Store display, reusable |
| Dynamic | dynamicMethod() | Fixed in QR | Invoice, one-time payment |
| Service | Enum | Description |
|---------|------|-------------|
| NAPAS_BY_ACCOUNT | Service::NAPAS_BY_ACCOUNT | Transfer to bank account |
| NAPAS_BY_CARD | Service::NAPAS_BY_CARD | Transfer to bank card |
| QR_CASH | Service::QR_CASH | ATM cash withdrawal |
| QR_PUSH | Service::QR_PUSH | Product payment |
{{-- SVG directly in HTML --}}
{!! VietQrCode::bankAccount(Bank::BIDV, '12345678901')->generateQr('svg', 250) !!}
{{-- Base64 image --}}
<img src="data:image/png;base64,{{ VietQrCode::bankAccount(Bank::BIDV, '12345678901')->generateQrBase64('png', 250) }}" alt="VietQR">
Comprehensive documentation is available in the /docs directory:
composer test
# Format code with Pint
composer format
# Run static analysis
composer analyse
For security vulnerabilities, please email [email protected].
MIT License. See LICENSE.md.