PAY by square
PayBySquare implementuje špecifikáciu by square 1.0.0, 1.1.0 a 1.2.0 (predvolená). Dokument obsahuje jednu alebo viac platieb — prvá je preferovaná — každú s jedným alebo viacerými bankovými účtami:
use Carbon\CarbonImmutable;
use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Qr\Enums\BySquare\BySquareVersion;
use RoundlyConsulting\Qr\Payloads\Payments\BySquare\{BankAccount, Beneficiary, PayBySquare, Payment};
$account = new BankAccount('SK46 1100 0000 0029 4714 7960', 'TATRSKBX');
$beneficiary = new Beneficiary('Roundly Consulting s.r.o.', street: 'Tolstého 5', city: '811 06 Bratislava');
$document = new PayBySquare(
payments: [Payment::order(
amount: Money::ofMinor(12550, 'EUR'),
accounts: [$account],
beneficiary: $beneficiary,
dueDate: CarbonImmutable::parse('2026-10-15'),
variableSymbol: '20260042',
constantSymbol: '0308',
note: 'Faktúra 2026-0042',
)],
invoiceId: '2026-0042',
version: BySquareVersion::V1_2_0, // null → config payments.bysquare.version
deburr: true, // null → config payments.bysquare.deburr
);
$svg = Qr::payBySquare($document)->size(220)->svg();Kódovanie a dekódovanie
$string = Qr::payBySquare($document)->payload()->toQrString(); // the string the code carries (config applied)
$standard = $document->encode(); // standard defaults (1.2.0, deburr on) for null fields — ignores config
$model = $document->serialize(); // the tab-separated data model
$same = PayBySquare::decode($string); // parse a PAY by square stringQr::payBySquare() doplní chýbajúce version alebo deburr z payments.bysquare.*; $document->encode() (aj toQrString()) konfiguráciu nečíta a použije predvolené hodnoty štandardu, takže sa s obsahom QR kódu zhoduje len pri predvolenej konfigurácii alebo ak dokument nastaví version/deburr sám.
Kód je čistý reťazec base32hex (prefix 00… pre 1.0.0, 04… pre 1.1.0, 08… pre 1.2.0), ktorý obaľuje dátový model chránený CRC-32 a skomprimovaný vlastnou implementáciou LZMA v balíku. Vždy ide o jeden alfanumerický QR segment bez ECI; korekcia chýb je predvolene M. Poškodený reťazec vyhodí BySquareDecodeException s dôvodom, ktorý pomenuje zlyhaný krok.
Trvalé príkazy a inkasá
use RoundlyConsulting\Qr\Enums\BySquare\{DirectDebitScheme, DirectDebitType, Month, Periodicity};
use RoundlyConsulting\Qr\Payloads\Payments\BySquare\{DirectDebitDetails, StandingOrderDetails};
// Standing order
Payment::standingOrder(
new StandingOrderDetails(Periodicity::Monthly, day: 15, months: [Month::January, Month::July], lastDate: CarbonImmutable::parse('2027-12-31')),
Money::ofMinor(3000, 'EUR'), [$account], $beneficiary,
);
// Direct debit
Payment::directDebit(
new DirectDebitDetails(scheme: DirectDebitScheme::Sepa, type: DirectDebitType::Recurrent, mandateId: 'M-2026-7', maxAmount: Money::ofMinor(5000, 'EUR')),
Money::ofMinor(1999, 'EUR'), [$account], $beneficiary,
);
// Amount left to the payer
Payment::order(null, [$account], $beneficiary, currency: 'EUR');| Enum | Hodnoty |
|---|---|
BySquareVersion | V1_0_0, V1_1_0, V1_2_0 |
Periodicity | Daily, Weekly, Biweekly, Monthly, Bimonthly, Quarterly, Semiannually, Annually |
Month | January … December (bitové príznaky; Month::mask() / Month::fromMask()) |
DirectDebitScheme | Other, Sepa |
DirectDebitType | OneOff, Recurrent |
Limity
- Suma ≥ 0; len meny podľa ISO 4217 — mena sumy, alebo currency:, ak je suma null (vtedy je povinná).
- Variabilný a špecifický symbol najviac 10 číslic, konštantný symbol najviac 4 číslice; referencia platiteľa ≤ 35; poznámka ≤ 140; číslo faktúry ≤ 10.
- Aspoň jeden účet na platbu; ID mandátu, veriteľa a zmluvy ≤ 35.
- Deň trvalého príkazu 1–7 pri týždennej/dvojtýždennej periodicite, inak 1–31, pri dennej žiadny; maxAmount inkasa v mene platby.
- Meno príjemcu 1–70, ulica a mesto ≤ 70.
Verzie a diakritika
Verzia 1.2.0 vyžaduje meno príjemcu pri každej platbe; 1.0.0 blok príjemcu nemá. So zapnutým deburr (predvolene) sa z poznámky a údajov príjemcu odstráni diakritika a limity sa potom overia znova. Dátumy sú kalendárne dátumy — zadávajte ich v časovom pásme, ktoré máte na mysli.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.