PHPackages                             lukawar/laravel-bank-kit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. lukawar/laravel-bank-kit

ActiveLibrary[Payment Processing](/categories/payments)

lukawar/laravel-bank-kit
========================

v1.0.0(1mo ago)01↑2900%proprietaryPHPPHP ^8.2

Since Mar 27Pushed 1mo agoCompare

[ Source](https://github.com/lukawar/laravel-bank-kit)[ Packagist](https://packagist.org/packages/lukawar/laravel-bank-kit)[ RSS](/packages/lukawar-laravel-bank-kit/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (6)Versions (2)Used By (0)

laravel-bank-kit
================

[](#laravel-bank-kit)

A Laravel package for generating Polish bank transfer files (ELIXIR format) and QR payment codes (Polish ZBP standard).

---

Requirements
------------

[](#requirements)

- PHP 8.2+
- Laravel 11+
- `ext-iconv` (for CP852 encoding in ELIXIR files)
- `ext-gd` or `ext-imagick` (required only when using QR codes with embedded logos)

---

Installation
------------

[](#installation)

```
composer require lukawar/laravel-bank-kit
```

The package registers itself automatically via Laravel's package auto-discovery.

Publish the configuration file:

```
php artisan vendor:publish --tag=bank-kit-config
```

---

Configuration
-------------

[](#configuration)

`config/bank-kit.php`:

```
return [
    // Default sender used in ELIXIR transfer files
    'sender' => [
        'account' => env('BANK_KIT_SENDER_ACCOUNT', ''),
        'name'    => env('BANK_KIT_SENDER_NAME', ''),
        'address' => env('BANK_KIT_SENDER_ADDRESS', ''),
    ],

    // QR code logo settings
    'qr' => [
        // null        → no logo
        // 'default'   → built-in black square logo
        // '/path/...' → custom image file (PNG/SVG recommended)
        'logo_path'  => env('BANK_KIT_QR_LOGO_PATH', null),
        'logo_width' => env('BANK_KIT_QR_LOGO_WIDTH', 60),
    ],

    // Payment gateways (future use)
    'gateways' => [],
];
```

`.env` variables:

VariableDefaultDescription`BANK_KIT_SENDER_ACCOUNT`—NRB account number of the default sender`BANK_KIT_SENDER_NAME`—Sender name`BANK_KIT_SENDER_ADDRESS`—Sender address`BANK_KIT_QR_LOGO_PATH``null`Logo path (`null`, `'default'`, or a path)`BANK_KIT_QR_LOGO_WIDTH``60`Logo width in pixels---

ELIXIR Transfer Files
---------------------

[](#elixir-transfer-files)

### Transfer types

[](#transfer-types)

ClassELIXIR codeDescription`StandardTransfer``51`Standard domestic transfer`SplitPaymentTransfer``53`VAT split payment`TaxOfficeTransfer``71`Tax office payment (US)`ZusTransfer``51`Social insurance payment (ZUS)### Standard transfer

[](#standard-transfer)

```
use lukawar\BankKit\DTOs\StandardTransfer;
use lukawar\BankKit\Formatters\ElixirFormatter;
use lukawar\BankKit\Generators\ElixirFileGenerator;
use Carbon\Carbon;

$transfer = new StandardTransfer(
    senderAccount:    '58249000050000460073649930',
    senderName:       'Firma Sp. z o.o.',
    senderAddress:    'ul. Przykładowa 1|00-001 Warszawa',
    recipientAccount: '12345678901234567890123456',
    recipientName:    'Kontrahent',
    recipientAddress: 'ul. Odbiorcza 2|00-002 Kraków',
    amountInGrosze:   531200,            // 5312.00 PLN
    executionDate:    Carbon::today(),
    title:            'Faktura VAT 1/2024',
);

$generator = new ElixirFileGenerator(new ElixirFormatter());
$files = $generator->generate(collect([$transfer]));

// $files[0] contains CP852-encoded file content ready to save
file_put_contents('transfers.pli', $files[0]);
```

### Split payment (MPP)

[](#split-payment-mpp)

```
use lukawar\BankKit\DTOs\SplitPaymentTransfer;

$transfer = new SplitPaymentTransfer(
    senderAccount:    '58249000050000460073649930',
    senderName:       'Firma Sp. z o.o.',
    senderAddress:    'ul. Przykładowa 1|00-001 Warszawa',
    recipientAccount: '12345678901234567890123456',
    recipientName:    'Kontrahent',
    recipientAddress: 'ul. Odbiorcza 2|00-002 Kraków',
    amountInGrosze:   123400,
    executionDate:    Carbon::today(),
    title:            'Faktura VAT 5/2024',
);
```

### Tax office transfer (US)

[](#tax-office-transfer-us)

```
use lukawar\BankKit\DTOs\TaxOfficeTransfer;
use lukawar\BankKit\Enums\TaxPeriodType;

$transfer = new TaxOfficeTransfer(
    senderAccount:    '58249000050000460073649930',
    senderName:       'Firma Sp. z o.o.',
    senderAddress:    'ul. Przykładowa 1|00-001 Warszawa',
    recipientAccount: '12345678901234567890123456',
    recipientName:    'Urząd Skarbowy',
    recipientAddress: 'ul. Skarbowa 1|00-001 Warszawa',
    amountInGrosze:   100000,
    executionDate:    Carbon::today(),
    taxpayerNip:      '1234567890',
    periodType:       TaxPeriodType::Month,
    periodNumber:     '03',
    formSymbol:       'PIT37',
    additionalInfo:   'DEKLARACJA',
);

// Generated title: N1234567890|M03|PIT37|DEKLARACJA
```

Available `TaxPeriodType` values:

Enum caseValueDescription`Year``R`Annual`Quarter``K`Quarterly`Month``M`Monthly`Decade``D`10-day`Day``J`Daily`None``0`No period### ZUS transfer

[](#zus-transfer)

```
use lukawar\BankKit\DTOs\ZusTransfer;

$transfer = new ZusTransfer(
    senderAccount:      '58249000050000460073649930',
    senderName:         'Firma Sp. z o.o.',
    senderAddress:      'ul. Przykładowa 1|00-001 Warszawa',
    recipientAccount:   '12345678901234567890123456',
    recipientName:      'ZUS',
    recipientAddress:   'ul. Składkowa 1|00-001 Warszawa',
    amountInGrosze:     150000,
    executionDate:      Carbon::today(),
    contributionPeriod: 'MARZEC 2024',
);

// Generated title: SKLADKA ZA MARZEC 2024
```

### Multiple transfers &amp; file splitting

[](#multiple-transfers--file-splitting)

The generator automatically splits transfers into multiple files when the collection exceeds 50 items (ELIXIR limit).

```
$files = $generator->generate(collect($transfers)); // array of file contents

$extension = $generator->resolveExtension(collect($transfers)); // 'pli' or 'pls'

foreach ($files as $index => $content) {
    file_put_contents("transfers_{$index}.{$extension}", $content);
}
```

File extensions:

- `.pli` — standard transfers only
- `.pls` — collection contains at least one split payment transfer

---

QR Payment Codes
----------------

[](#qr-payment-codes)

Generates QR codes following the **Polish Bank Association (ZBP)** payment standard.

QR content format: `|PL|{IBAN}|{AMOUNT_IN_GROSZE}|{RECIPIENT_NAME}|{TITLE}|||`

### Basic usage

[](#basic-usage)

```
use lukawar\BankKit\QrPayment\DTOs\QrPaymentData;
use lukawar\BankKit\QrPayment\Formatters\PolishQrPaymentFormatter;
use lukawar\BankKit\QrPayment\Generators\QrPaymentGenerator;
use lukawar\BankKit\QrPayment\Renderers\EndroidSvgRenderer;

$generator = new QrPaymentGenerator(
    new PolishQrPaymentFormatter(),
    new EndroidSvgRenderer(),
);

$data = new QrPaymentData(
    iban:           'PL10105000997603123456789123',
    amountInGrosze: 53120,               // 531.20 PLN
    recipientName:  'Firma Sp. z o.o.',
    title:          'Faktura VAT 1/2024', // optional
);

$svg = $generator->generate($data, size: 300);

// In a Laravel controller:
return response($svg, 200, ['Content-Type' => $generator->mimeType()]);
```

### PNG output

[](#png-output)

```
use lukawar\BankKit\QrPayment\Renderers\EndroidPngRenderer;

$generator = new QrPaymentGenerator(
    new PolishQrPaymentFormatter(),
    new EndroidPngRenderer(),
);

$png = $generator->generate($data);
```

### With a logo in the center

[](#with-a-logo-in-the-center)

```
use lukawar\BankKit\QrPayment\DTOs\QrLogo;

$logo = new QrLogo(
    imagePath: '/path/to/logo.png', // PNG or SVG
    width:     60,                  // pixels
);

$svg = $generator->generate($data, size: 300, logo: $logo);
```

Using the built-in black square default logo:

```
use lukawar\BankKit\QrPayment\Logos\BlackSquareLogoGenerator;
use lukawar\BankKit\QrPayment\DTOs\QrLogo;

$logoPath = (new BlackSquareLogoGenerator())->generate();
$logo = new QrLogo(imagePath: $logoPath, width: 60);

$svg = $generator->generate($data, logo: $logo);
```

Or resolve logo from config (`BANK_KIT_QR_LOGO_PATH=default`):

```
use lukawar\BankKit\BankKitServiceProvider;

$logo = BankKitServiceProvider::resolveLogoFromConfig();
$svg = $generator->generate($data, logo: $logo);
```

### Via the BankKit facade

[](#via-the-bankkit-facade)

```
use lukawar\BankKit\Facades\BankKit;
use lukawar\BankKit\QrPayment\DTOs\QrPaymentData;

$data = new QrPaymentData(
    iban:           'PL10105000997603123456789123',
    amountInGrosze: 53120,
    recipientName:  'Firma Sp. z o.o.',
    title:          'Faktura VAT 1/2024',
);

$svg = BankKit::generateQrPayment($data);
```

### IBAN handling

[](#iban-handling)

`QrPaymentData` normalizes the IBAN automatically (removes spaces and dashes, uppercases) and validates the format on construction. An `InvalidIbanException` is thrown for invalid values.

```
// All of these produce the same normalized IBAN: PL10105000997603123456789123
new QrPaymentData(iban: 'pl 10 1050 0099 7603 1234 5678 9123', ...);
new QrPaymentData(iban: 'PL10-1050-0099-7603-1234-5678-9123', ...);
```

### Custom formatter or renderer

[](#custom-formatter-or-renderer)

Implement the appropriate interface to plug in your own format or output type:

```
use lukawar\BankKit\QrPayment\Contracts\QrPaymentFormatterInterface;
use lukawar\BankKit\QrPayment\DTOs\QrPaymentData;

class SepaQrPaymentFormatter implements QrPaymentFormatterInterface
{
    public function format(QrPaymentData $data): string
    {
        return implode("\n", [
            'BCD', '002', '1', 'SCT', '',
            $data->recipientName,
            $data->iban,
            'EUR'.number_format($data->amountInGrosze / 100, 2, '.', ''),
            '', '', $data->title,
        ]);
    }
}

$generator = new QrPaymentGenerator(
    new SepaQrPaymentFormatter(),
    new EndroidSvgRenderer(),
);
```

---

License
-------

[](#license)

Proprietary.

###  Health Score

38

—

LowBetter than 85% of packages

Maintenance90

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

46d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3dc6e29b80edc22cd556ef2efb0a58e162cbd43f217573060eaeb620c315235e?d=identicon)[lukawar](/maintainers/lukawar)

---

Top Contributors

[![lukawar](https://avatars.githubusercontent.com/u/2051338?v=4)](https://github.com/lukawar "lukawar (4 commits)")

---

Tags

qrlaravelpaymentBanktransferelixir

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/lukawar-laravel-bank-kit/health.svg)

```
[![Health](https://phpackages.com/badges/lukawar-laravel-bank-kit/health.svg)](https://phpackages.com/packages/lukawar-laravel-bank-kit)
```

###  Alternatives

[021/laravel-wallet

Reliable and flexible wallet system for Laravel

2785.2k](/packages/021-laravel-wallet)[larabook/gateway

A Laravel package for connecting to all Iraninan payment gateways

24553.7k](/packages/larabook-gateway)[omalizadeh/laravel-multi-payment

A driver-based laravel package for online payments via multiple gateways

491.1k](/packages/omalizadeh-laravel-multi-payment)[dena-a/iran-payment

a Laravel package to handle Internet Payment Gateways for Iran Banking System

312.4k1](/packages/dena-a-iran-payment)[parsisolution/gateway

A Laravel package for connecting to all Iraninan payment gateways

231.7k](/packages/parsisolution-gateway)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
