webrteu / librapay
LibraPay (Libra Internet Bank) driver for webrteu/payments (Laravel, Romania)
Requires
- php: ^8.2
- illuminate/console: ^12.0|^13.0
- illuminate/database: ^12.0|^13.0
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- webrteu/payments: ^1.0
Requires (Dev)
- larastan/larastan: ^3.13
- laravel/pint: ^1.32
- orchestra/testbench: ^10.0|^11.0
- peckphp/peck: ^0.3
- pestphp/pest: ^3.8|^4.7
- pestphp/pest-plugin-laravel: ^3.2|^4.1
- pestphp/pest-plugin-type-coverage: ^3.6|^4.0.4
- phpstan/phpstan: ^2.3.3,!=2.3.4
- rector/rector: ^2.8
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Integrare Laravel pentru LibraPay (Libra Internet Bank): plată pe pagina găzduită printr-un formular POST semnat
P_SIGN (HMAC-SHA1), confirmare prin IPN. Implementează Gateway din webrteu/payments.
Nu este un pachet oficial Libra Internet Bank.
⚠️ Neverificat pe API real. Protocolul urmează tiparul „e-Commerce Gateway” (câmpuri în majuscule + P_SIGN). Ordinea câmpurilor, valorile
TRTYPE/ACTION, URL-urile și răspunsul la IPN stau înconfig/librapay.phpși trebuie confirmate unul câte unul cu documentația oficială primită de la Libra la semnarea contractului.
Cerințe
- PHP
^8.2, Laravel 12–13 - contract LibraPay (Terminal ID, Merchant ID, cheie de 32 hex)
webrteu/payments(cu migrareapaymentsdeja rulată)
Instalare
composer require webrteu/librapay
php artisan vendor:publish --tag=librapay-config
php artisan vendor:publish --tag=librapay-migrations # coloana payments.librapay_order
php artisan migrate
Configurare
LIBRAPAY_SANDBOX=true LIBRAPAY_URL= # URL-ul formularului din documentația Libra LIBRAPAY_TERMINAL= # 8 cifre LIBRAPAY_MERCHANT= # 15 cifre (de regulă 0000000 + Terminal ID) LIBRAPAY_MERCHANT_NAME= LIBRAPAY_MERCHANT_URL= LIBRAPAY_EMAIL= LIBRAPAY_KEY= # 32 caractere hex LIBRAPAY_MERCH_GMT=+2 LIBRAPAY_IPN_RESPONSE=1 # corpul cerut la confirmarea IPN ⚠️ LIBRAPAY_BACKREF= # gol = https://site.ro/webhooks/payments/librapay
Utilizare
$redirect = Payments::start('librapay', $paymentRequest, payable: $order); return $redirect->toResponse(); // formular POST trimis automat
ORDER trebuie să fie numeric, cu lungime minimă: pachetul îl derivă din id-ul rândului payments
(100000 + id, completat cu zerouri până la order_min_length) și păstrează maparea în payments.librapay_order.
IPN-ul e tradus înapoi automat în order_id-ul aplicației.
Webhook (IPN)
- URL:
https://site.ro/webhooks/payments/librapay(comunicat la Libra sau trimis caBACKREF, după docs) - verificare: P_SIGN pe câmpurile din
fields.response,TERMINAL,AMOUNT(prin core) și vechimeaTIMESTAMP(maximtimestamp_tolerance_minutes, protecție la replay) - idempotență:
INT_REF+TRTYPE+ACTION
ACTION / RC |
PaymentStatus |
|---|---|
0 + RC=00 |
Paid |
0 + alt RC, 2, 3 |
Failed |
1 (duplicat) |
ignorat (Unknown nu suprascrie nimic) |
Ce nu face pachetul (încă)
- captură, anulare, refund (
TRTYPEdiferit, server-to-server): se adaugă după confirmarea valorilor în docs status()/ reconciliere:UnsupportedOperationException
Testare
composer test
LIBRAPAY_SANDBOX_URL=... LIBRAPAY_SANDBOX_TERMINAL=... LIBRAPAY_SANDBOX_KEY=... vendor/bin/pest --group=sandbox
Card de test: 4111111111111111. Vectorii P_SIGN sunt calculați cu implementarea din core. De înlocuit cu exemplul oficial Libra.
Changelog
Vezi CHANGELOG.md.
Autor
Licență
MIT. Vezi LICENSE.md.