Search by

webrteu / btipay

webrteu

BT iPay (Banca Transilvania) driver for webrteu/payments (Laravel, Romania)

v1.0.0 2026-11-04 05:09 UTC

This package is auto-updated.

Last update: 2026-11-04 05:10:13 UTC


README

PHP Laravel Licență MIT Packagist

Integrare Laravel pentru BT iPay (Banca Transilvania), API REST *.do: plată într-un pas sau pre-autorizare + capturare, refund, confirmare prin API (callback sau ruta de return), mesajele actionCode cerute la certificarea BT. Implementează Gateway, Refundable, Capturable și ConfirmsWebhooks din webrteu/payments.

Nu este un pachet oficial Banca Transilvania.

Cerințe

  • PHP ^8.2, Laravel 12–13
  • contract e-commerce BT (utilizator API + parolă, separate pentru test și producție)
  • certificare pe mediul de test înainte de producție (inclusiv mesajele pentru codurile de eroare)
  • webrteu/payments

Instalare

composer require webrteu/btipay
php artisan vendor:publish --tag=btipay-config
php artisan vendor:publish --tag=btipay-lang     # opțional, pentru a personaliza mesajele

Configurare

BTIPAY_SANDBOX=true           # ecclients.btrl.ro:5443 (test)
BTIPAY_USERNAME=              # utilizator API primit de la BT
BTIPAY_PASSWORD=
BTIPAY_CALLBACK_TOKEN=        # doar dacă BT activează callback cu checksum
BTIPAY_TWO_STEP=false         # true = pre-autorizare + capturare manuală
BTIPAY_RETURN_URL=            # gol = ruta btipay.return din pachet
BTIPAY_AFTER_RETURN_URL=/     # unde ajunge clientul după ruta de return (?order=&btipay_order=)
BTIPAY_TIMEOUT=30

⚠️ URL-urile de test/producție și lista de coduri se confirmă din documentația BT primită la contract.

Utilizare

$redirect = Payments::start('btipay', $paymentRequest, payable: $order);   // register.do (sau registerPreAuth.do)
return $redirect->toResponse();

Suma se trimite în bani (14170), moneda 946 (RON), plus orderBundle (date client pentru 3DS2).

Metodă BT iPay
status($orderId) getOrderStatusExtended.do
BtiPay::capture($orderId, $bani) deposit.do
BtiPay::void($orderId) reverse.do
BtiPay::refund($orderId, $bani) refund.do

Confirmarea plății

  1. Callback (dacă BT îl activează): https://site.ro/webhooks/payments/btipay. Cu BTIPAY_CALLBACK_TOKEN, checksum-ul HMAC-SHA256 pe parametrii sortați („cheie;valoare;”) e obligatoriu. Fără token, callback-ul e tratat doar ca semnal.
  2. Return (întotdeauna): returnUrl = GET /payments/btipay/return?orderId=... (ruta btipay.return). Parametrii din URL nu sunt crezuți: se pune pe coadă jobul din core, care cere statusul prin getOrderStatusExtended.do.

Combinat cu payments:reconcile, plata se confirmă chiar dacă clientul închide pagina.

Mesajul pentru client la eșec (cerut la certificare):

use WeBRTeu\BtiPay\Facades\BtiPay;

$message = BtiPay::messageFor($status->raw['actionCode'] ?? null);   // „Fonduri insuficiente.”

Statusuri

orderStatus PaymentStatus
0, 5 Pending
1 Authorized
2 Paid
3 Cancelled
4 Refunded sau PartiallyRefunded (după depositedAmount vs refundedAmount)
6 Failed

Ce nu face pachetul

  • nu suportă callback cu semnătură asimetrică
  • nu colectează date de card

Testare

composer test
BTIPAY_SANDBOX_USERNAME=... BTIPAY_SANDBOX_PASSWORD=... vendor/bin/pest --group=sandbox

Fixture-urile sunt după documentație. De înlocuit cu răspunsuri reale.

Changelog

Vezi CHANGELOG.md.

Autor

WeBRTeu

Licență

MIT. Vezi LICENSE.md.