1. Go to this page and download the library: Download sasa-b/php-bihupp-qrcode library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sasa-b / php-bihupp-qrcode example snippets
use Sco\BihuppQRCode\PaymentInstruction\Address\Address;
use Sco\BihuppQRCode\PaymentInstruction\Address\AddressLine1;
use Sco\BihuppQRCode\PaymentInstruction\Address\AddressLine2;
use Sco\BihuppQRCode\PaymentInstruction\Detail\Account;
use Sco\BihuppQRCode\PaymentInstruction\Detail\Amount;
use Sco\BihuppQRCode\PaymentInstruction\Detail\PaymentPurpose;
use Sco\BihuppQRCode\PaymentInstruction\Detail\PaymentReference;
use Sco\BihuppQRCode\PaymentInstruction\Detail\Sender;
use Sco\BihuppQRCode\PaymentInstruction\Name;
use Sco\BihuppQRCode\PaymentInstruction\PaymentInstruction;
use Sco\BihuppQRCode\PaymentInstruction\Recipient\Recipient;
use Sco\BihuppQRCode\PaymentInstruction\Recipient\RecipientAccount;
$instruction = new PaymentInstruction(
sender: new Sender(
name: Name::individual('Marko', 'Marković'),
address: new Address(
addressLine1: AddressLine1::from('Ulica Meše Selimovića', '12'),
addressLine2: AddressLine2::from('78000', 'Banja Luka'),
),
account: new Account('1234567890123456'),
),
recipient: new Recipient(
name: Name::business('Vodovod d.o.o.'),
address: new Address(
addressLine1: AddressLine1::from('Kralja Petra I Karađorđevića', '97'),
addressLine2: AddressLine2::from('78000', 'Banja Luka'),
),
account: new RecipientAccount(new Account('9876543210987654')),
),
purpose: new PaymentPurpose('Račun za vodu - april 2024'),
reference: new PaymentReference('1234-5678-001'),
amount: new Amount('9862'), // amount in pennies (= 98.62 BAM)
);
// Render as SVG (default)
$svg = $instruction->toQRCode();
use Sco\BihuppQRCode\PaymentInstruction\Detail\PaymentPriority;
$instruction = new PaymentInstruction(
sender: $sender,
recipient: $recipient,
purpose: new PaymentPurpose('Invoice payment'),
reference: new PaymentReference('INV-2024-001'),
amount: new Amount('10000'), // 100.00 BAM
paymentPriority: PaymentPriority::regular(), // defaults to regular ('N')
);
use Sco\BihuppQRCode\PaymentInstruction\Detail\Sender;
$instruction = new PaymentInstruction(
sender: null,
recipient: $recipient,
purpose: new PaymentPurpose('Troškovi vode'),
reference: new PaymentReference('1445-26554-11222'),
amount: new Amount('9862'),
);
use Sco\BihuppQRCode\PaymentInstruction\Detail\Account;
use Sco\BihuppQRCode\PaymentInstruction\Recipient\RecipientAccount;
$account = new RecipientAccount(
new Account('1234567890123456'),
new Account('9876543210987654'),
new Account('1111222233334444'),
);
use Sco\BihuppQRCode\PaymentInstruction\Recipient\PhoneNumber;
$sender = new Sender(
name: Name::individual('Ana', 'Anić'),
address: new Address(
addressLine1: AddressLine1::from('Kralja Tomislava', '5'),
addressLine2: AddressLine2::from('88000', 'Mostar'),
),
account: new Account('1234567890123456'),
phoneNumber: new PhoneNumber('+38761234567'), // E.164 format, "+" prefix
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenueInstruction;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\BudgetOrgCode;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\MunicipalCode;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\PaymentReference as PublicRevenuePaymentReference;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\PaymentType;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\RevenueType;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\SenderTaxId;
use Sco\BihuppQRCode\PaymentInstruction\PublicRevenue\TaxPeriodDate;
$instruction = new PaymentInstruction(
sender: new Sender(
name: Name::business('Example Company d.o.o.'),
address: new Address(
addressLine1: AddressLine1::from('Veselina Masleše', '20'),
addressLine2: AddressLine2::from('78000', 'Banja Luka'),
),
account: new Account('1234567890123456'),
),
recipient: new Recipient(
name: new Name('Trezor'),
address: new Address(
addressLine1: AddressLine1::from('Aleja Svetog Save', '13'),
addressLine2: AddressLine2::from('78000', 'Banja Luka'),
),
account: new RecipientAccount(new Account('1610000010680092')),
),
purpose: new PaymentPurpose('Porez na dobit'),
reference: null,
amount: new Amount('500000'), // 5000.00 BAM
publicRevenue: new PublicRevenueInstruction(
senderTaxId: new SenderTaxId('4200730150004'), // 13-digit tax ID (JIB/JMBG)
paymentType: new PaymentType('3'),
revenueType: new RevenueType('712115'),
taxPeriodStartDate: TaxPeriodDate::fromDate(new DateTimeImmutable('2024-01-01')),
taxPeriodEndDate: TaxPeriodDate::fromDate(new DateTimeImmutable('2024-12-31')),
municipalCode: new MunicipalCode('077'),
budgetOrgCode: new BudgetOrgCode('1200200'),
paymentReference: new PublicRevenuePaymentReference('7110578163'),
),
);
echo (string) $instruction;
// BIHUPP10
// Example Company d.o.o.
// Zmaja od Bosne 75
// 71000 Sarajevo
// ...
var_dump($instruction->lines());
$svg = $instruction->toQRCode(); // returns SVG XML string
use Sco\BihuppQRCode\QRCode\RenderStrategy\GDPng;
use Sco\BihuppQRCode\QRCode\RenderStrategy\GDJpeg;
$png = $instruction->toQRCode(renderStrategy: new GDPng()); // PNG binary
$jpeg = $instruction->toQRCode(renderStrategy: new GDJpeg()); // JPEG binary
use Sco\BihuppQRCode\QRCode\RenderStrategy\ImagickPng;
use Sco\BihuppQRCode\QRCode\RenderStrategy\ImagickJpeg;
$png = $instruction->toQRCode(renderStrategy: new ImagickPng()); // PNG binary
$jpeg = $instruction->toQRCode(renderStrategy: new ImagickJpeg()); // JPEG binary
use Sco\BihuppQRCode\QRCode\RenderStrategy\Base64Link;
use Sco\BihuppQRCode\QRCode\RenderStrategy\GDPng;
use Sco\BihuppQRCode\QRCode\RenderStrategy\ImagickJpeg;
$svgUri = $instruction->toQRCode(renderStrategy: new Base64Link()); // data:image/svg+xml;base64,...
$pngUri = $instruction->toQRCode(renderStrategy: new Base64Link(new GDPng())); // data:image/png;base64,...
$jpegUri = $instruction->toQRCode(renderStrategy: new Base64Link(new ImagickJpeg())); // data:image/jpeg;base64,...
use Sco\BihuppQRCode\PaymentInstruction\PaymentInstruction;
use Sco\BihuppQRCode\QRCode\Renderer;
use Sco\BihuppQRCode\QRCode\RenderStrategy;
use Sco\BihuppQRCode\QRCode\RenderStrategy\Svg;
final readonly class MyRenderer implements Renderer
{
public function render(PaymentInstruction $data, RenderStrategy $strategy): string
{
// use any QR library here
return myQrLib()->encode((string) $data);
}
}
$svg = $instruction->toQRCode(renderer: new MyRenderer(), renderStrategy: new Svg());
use Sco\BihuppQRCode\QRCode\Reader;
use Sco\BihuppQRCode\QRCode\ReadSource\Filepath;
use Sco\BihuppQRCode\QRCode\ReadSource\Blob;
use Sco\BihuppQRCode\QRCode\Reader\SuccessScanResult;
use Sco\BihuppQRCode\QRCode\Reader\FailureScanResult;
// From a file path
$result = Reader::scan(new Filepath('/path/to/qrcode.png'));
// From binary image data (e.g. an uploaded file)
$result = Reader::scan(new Blob(file_get_contents('/path/to/qrcode.png')));
if ($result instanceof SuccessScanResult) {
$instruction = $result->paymentInstruction; // PaymentInstruction
$raw = $result->rawPayload; // raw BIHUPP payload string
echo $instruction->sender->name->value; // e.g. "Marko Marković"
echo $instruction->amount->value; // e.g. "000000000010000"
} else {
// $result is FailureScanResult
echo $result->error->getMessage(); // reason for failure
// $result->rawPayload is null when the image contained no QR code
}
use Sco\BihuppQRCode\QRCode\ImageExtension;
$result = Reader::read(new Filepath('/path/to/qrcode.png', ImageExtension::Imagick));
Amount::fromInt(9862); // 98.62 BAM
Amount::fromFloat(98.62); // 98.62 BAM (strips the decimal separator)
new Amount('9862'); // same, from a string