PHPackages                             sylapi/omnipay-tbibank - 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. sylapi/omnipay-tbibank

ActiveLibrary[Payment Processing](/categories/payments)

sylapi/omnipay-tbibank
======================

TBIBank gateway for Omnipay payment processing library

v1.0.3(2mo ago)05MITPHPCI failing

Since Feb 18Pushed 2mo agoCompare

[ Source](https://github.com/sylapi/omnipay-tbibank)[ Packagist](https://packagist.org/packages/sylapi/omnipay-tbibank)[ RSS](/packages/sylapi-omnipay-tbibank/feed)WikiDiscussions master Synced 1mo ago

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

Omnipay: TBIBank
================

[](#omnipay-tbibank)

[![PHPStan](https://camo.githubusercontent.com/7a8a54e7ee075f9a33edda53b4e146cabdd7b14478a2ca64d17080aaff0f3b3d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230352d627269676874677265656e2e7376673f7374796c653d666c6174)](https://camo.githubusercontent.com/7a8a54e7ee075f9a33edda53b4e146cabdd7b14478a2ca64d17080aaff0f3b3d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230352d627269676874677265656e2e7376673f7374796c653d666c6174)[![Tests](https://camo.githubusercontent.com/08439f986d4b49f842fbb0e4b692b61ccb964080b0339e6945c16ddb6c2dfa5d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d50617373696e672d677265656e2e737667)](https://camo.githubusercontent.com/08439f986d4b49f842fbb0e4b692b61ccb964080b0339e6945c16ddb6c2dfa5d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d50617373696e672d677265656e2e737667)[![Version](https://camo.githubusercontent.com/d4b5fa4adf514144779a7864904c5e15236c0e798635240c7f6ce9a455657b80/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e302532422d626c75652e737667)](https://camo.githubusercontent.com/d4b5fa4adf514144779a7864904c5e15236c0e798635240c7f6ce9a455657b80/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e302532422d626c75652e737667)

**TBIBank eCommerce Platform integration for Omnipay payment processing library**

Biblioteka umożliwiająca integrację z platformą kredytową TBI Bank poprzez framework Omnipay. Obsługuje aplikacje kredytowe, callbacki oraz anulowanie zamówień z pełnym szyfrowaniem RSA.

Instalacja
----------

[](#instalacja)

```
composer require sylapi/omnipay-tbibank
```

Szybki start
------------

[](#szybki-start)

```
use Omnipay\Omnipay;

// Inicjalizacja bramy
$gateway = Omnipay::create('TBIBank');

// Konfiguracja (dane testowe)
$gateway->setStoreId('tbitestapi_ro');
$gateway->setUsername('tbitestapi');
$gateway->setPassword('MZWlyiuAIbnyT0UO');
$gateway->setProviderCode('tbitestapi_ro');
$gateway->setTestMode(true);

// Aplikacja kredytowa
$response = $gateway->purchase([
    'amount' => '2500.00',
    'transactionReference' => 'order#12345',
    'customerFirstName' => 'Catalin',
    'customerLastName' => 'Test',
    'customerEmail' => 'test@example.com'
])->send();

if ($response->isSuccessful() && $response->isRedirect()) {
    // Przekieruj klienta na platformę TBI
    header('Location: ' . $response->getRedirectUrl());
}
```

🔄 Przepływ pracy (Flow)
-----------------------

[](#-przepływ-pracy-flow)

### 1. Aplikacja kredytowa

[](#1-aplikacja-kredytowa)

```
[E-commerce] → [TBI API] → [TBI Portal] → [Klient] → [Callback] → [E-commerce]

```

**Krok 1**: Sklep wysyła zaszyfrowane dane aplikacji kredytowej **Krok 2**: TBI API zwraca URL przekierowania (301/302) **Krok 3**: Klient kończy aplikację na portalu TBI **Krok 4**: TBI wysyła callback'a z wynikiem (zatwierdzenie/odrzucenie)

### 2. Detailowy flow

[](#2-detailowy-flow)

1. **Przygotowanie danych**

    - Dane zamówienia i klienta
    - Szyfrowanie RSA (danych wrażliwych)
    - Wysłanie POST do `/Api/LoanApplication/Finalize`
2. **Odpowiedź TBI**

    - HTTP 301/302 z URL przekierowania
    - Klient trafia na portal TBI Bank
3. **Portal TBI**

    - Weryfikacja tożsamości klienta
    - Ocena zdolności kredytowej
    - Akceptacja/odrzucenie przez klienta
4. **Callback**

    - TBI wywołuje `notifyUrl` z rezultatem
    - Dane są opcjonalnie zaszyfrowane
    - Status: approved/rejected/cancelled

Konfiguracja
------------

[](#konfiguracja)

### Środowisko testowe

[](#środowisko-testowe)

```
$gateway->setStoreId('tbitestapi_ro');
$gateway->setUsername('tbitestapi');
$gateway->setPassword('MZWlyiuAIbnyT0UO');
$gateway->setProviderCode('tbitestapi_ro');
$gateway->setTestMode(true);
```

### Środowisko produkcyjne

[](#środowisko-produkcyjne)

```
$gateway->setStoreId('your_store_id');
$gateway->setUsername('your_username');
$gateway->setPassword('your_password');
$gateway->setProviderCode('your_store_id');
$gateway->setTestMode(false);

// Własny klucz publiczny do szyfrowania (bezpośrednia zawartość)
$gateway->setPublicKey('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----');
```

💳 Aplikacja kredytowa
---------------------

[](#-aplikacja-kredytowa)

### Podstawowy przykład

[](#podstawowy-przykład)

```
$response = $gateway->purchase([
    'amount' => '2500.00',
    'transactionReference' => 'order#' . uniqid(),
    'description' => 'Smartwatch order',
    'notifyUrl' => 'https://your-domain.com/tbi/callback',

    // Dane klienta (wymagane)
    'customerFirstName' => 'Catalin',
    'customerLastName' => 'Test',
    'customerEmail' => 'test@example.com',
    'customerPhone' => '0700000000',
    'customerCnp' => '',  // CNP może być pusty w testach

    // Adres rozliczeniowy
    'billingAddress' => 'Strada Test 123',
    'billingCity' => 'Bucuresti',
    'billingCounty' => 'Bucuresti',

    // Produkty w koszyku
    'items' => [
        [
            'name' => 'Ceas smartwatch Polar Vantage V',
            'qty' => '1.0000',
            'price' => 2500.00,
            'category' => '8',
            'sku' => 'WATCH001',
            'ImageLink' => 'https://example.com/image.jpg'
        ]
    ]
])->send();

// Sprawdź rezultat
if ($response->isSuccessful()) {
    if ($response->isRedirect()) {
        // Przekieruj klienta na portal TBI
        $redirectUrl = $response->getRedirectUrl();
        header("Location: $redirectUrl");
        exit;
    }
} else {
    // Obsłuż błąd
    echo "Błąd: " . $response->getMessage();
}
```

### Wymagane parametry

[](#wymagane-parametry)

ParametrTypOpis`amount`stringKwota zamówienia (format: "1600.00")`transactionReference`stringUnikalny ID zamówienia`customerFirstName`stringImię klienta`customerLastName`stringNazwisko klienta`customerEmail`stringEmail klienta`customerPhone`stringTelefon klienta`notifyUrl`stringURL callback'a### Opcjonalne parametry

[](#opcjonalne-parametry)

ParametrTypOpis`description`stringOpis zamówienia`customerCnp`stringCNP (Romanian Personal Code)`billingAddress`stringAdres rozliczeniowy`billingCity`stringMiasto`billingCounty`stringWojewództwo/Kraj`items`arrayLista produktów📞 Obsługa callback'ów
---------------------

[](#-obsługa-callbacków)

Callback'i są wysyłane przez TBI po zakończeniu procesu aplikacji kredytowej.

```
// Endpoint callback'a: /tbi/callback
$response = $gateway->completePurchase([
    // TYLKO jeśli klucz prywatny ma hasło:
    // 'privateKeyPassword' => 'haslo_do_klucza'
])->send();

if ($response->isSuccessful()) {
    // Kredyt zatwierdzony
    $orderId = $response->getTransactionId();
    echo "Kredyt zatwierdzony dla zamówienia: $orderId";

    // Zaktualizuj status w bazie danych
    // updateOrderStatus($orderId, 'approved');

} elseif ($response->isCancelled()) {
    // Kredyt odrzucony/anulowany
    $orderId = $response->getTransactionId();
    $reason = $response->getRejectionReason();
    echo "Kredyt odrzucony: $reason";

    // updateOrderStatus($orderId, 'rejected', $reason);
}
```

❌ Anulowanie zamówień
---------------------

[](#-anulowanie-zamówień)

Możliwe przed zatwierdzeniem kredytu przez klienta.

```
$response = $gateway->void([
    'transactionReference' => 'order#12345'
])->send();

if ($response->isSuccessful()) {
    echo 'Zamówienie zostało anulowane';
} else {
    echo 'Błąd anulowania: ' . $response->getMessage();
}
```

🔐 Szyfrowanie RSA
-----------------

[](#-szyfrowanie-rsa)

### Wbudowany klucz testowy

[](#wbudowany-klucz-testowy)

W trybie testowym używany jest wbudowany klucz publiczny TBI:

```
$gateway->setTestMode(true); // Automatycznie użyje klucza testowego TBI
```

### Własny klucz produkcyjny

[](#własny-klucz-produkcyjny)

```
// Klucz publiczny (zawartość klucza bezpośrednio)
$gateway->setPublicKey('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----');

// Klucz prywatny do callback'ów (zawartość klucza bezpośrednio)
$gateway->setPrivateKey('-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC...
-----END PRIVATE KEY-----');

// TYLKO jeśli klucz prywatny MA HASŁO (rzadko potrzebne)
// $gateway->setPrivateKeyPassword('haslo_ktorym_zaszyfrowano_klucz');
```

### Format kluczy

[](#format-kluczy)

Klucze muszą być w formacie PEM:

```
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----

```

### Hasło do klucza prywatnego

[](#hasło-do-klucza-prywatnego)

**Uwaga**: Hasło (`setPrivateKeyPassword`) jest potrzebne **TYLKO** gdy klucz prywatny został wygenerowany z hasłem ochronnym.

```
# Klucz BEZ hasła (częściej używane przez aplikacje):
openssl genrsa -out private.pem 2048

# Klucz Z hasłem (rzadziej):
openssl genrsa -aes256 -out private.pem 2048
```

Jeśli twój klucz nie ma hasła, **nie ustawiaj** `setPrivateKeyPassword`.

🌐 Endpointy API
---------------

[](#-endpointy-api)

### Produkcja

[](#produkcja)

- **Aplikacja kredytowa**: `https://ecommerce.tbibank.ro/Api/LoanApplication/Finalize`
- **Anulowanie zamówienia**: `https://ecommerce.tbibank.ro/Api/LoanApplication/CanceledByCustomer`

### Metody HTTP

[](#metody-http)

- **POST** - wysłanie aplikacji kredytowej
- **POST** - anulowanie zamówienia
- **POST/GET** - callback (ustaw w panelu TBI)

📊 Struktura danych
------------------

[](#-struktura-danych)

### Dane zamówienia (przed szyfrowaniem)

[](#dane-zamówienia-przed-szyfrowaniem)

```
{
    "store_id": "tbitestapi_ro",
    "order_id": "order#12345",
    "back_ref": "https://your-domain.com/callback",
    "order_total": "2500.00",
    "username": "tbitestapi",
    "password": "MZWlyiuAIbnyT0UO",
    "customer": {
        "fname": "Catalin",
        "lname": "Test",
        "email": "test@example.com",
        "phone": "0700000000",
        "cnp": "",
        "billing_address": "Strada Test 123",
        "billing_city": "Bucuresti",
        "billing_county": "Bucuresti",
        "promo": 0
    },
    "items": [
        {
            "name": "Product name",
            "qty": "1.0000",
            "price": 2500.00,
            "category": "8",
            "sku": "PRODUCT001",
            "ImageLink": "https://example.com/image.jpg"
        }
    ]
}
```

### Odpowiedź TBI (sukces)

[](#odpowiedź-tbi-sukces)

```
HTTP/1.1 301 Moved Permanently
Location: https://app.tbibank.ro/b2cportal/platform/B2CAuth/ResumeJourney?journeyName=FTOS_Loan_eCommerce&sessionId=xxx&link2payid=yyy
```

### Callback data

[](#callback-data)

```
{
    "status": "approved|rejected|cancelled",
    "order_id": "order#12345",
    "amount": "2500.00",
    "reason": "rejection reason (if applicable)"
}
```

🧪 Testowanie
------------

[](#-testowanie)

### Uruchomienie testów

[](#uruchomienie-testów)

```
vendor/bin/phpunit
```

### PhpStan (Level 5)

[](#phpstan-level-5)

```
vendor/bin/phpstan analyse
```

⚠️ Wymagania
------------

[](#️-wymagania)

- **PHP**: 8.0+
- **PHP Extensions**: openssl, curl, json
- **Dependencies**: omnipay/common ^3.0

🔧 Configuration checklist
-------------------------

[](#-configuration-checklist)

### Pre-deployment

[](#pre-deployment)

- Otrzymaj credentials od TBI Integration Team
- Skonfiguruj klucze RSA (publiczny/prywatny)
- Ustaw callback URL w panelu TBI
- Przetestuj w środowisku testowym
- Skonfiguruj logowanie błędów

### Go-live

[](#go-live)

- `setTestMode(false)`
- Zmień credentials na produkcyjne
- Ustaw właściwą ścieżkę do kluczy
- Skonfiguruj monitoring callback'ów
- Testuj z prawdziwymi danymi (tylko małe kwoty!)

🆘 Troubleshooting
-----------------

[](#-troubleshooting)

### HTTP 500 Error

[](#http-500-error)

- Sprawdź credentials
- Zweryfikuj format danych
- Sprawdź klucz publiczny

### HTTP 301/302 to błędny URL

[](#http-301302-to-błędny-url)

- Skonfiguruj prawidłowy `notifyUrl`
- Sprawdź konfigurację w panelu TBI

### Callback nie działa

[](#callback-nie-działa)

- Zweryfikuj endpoint callback'a
- Sprawdź klucz prywatny do odszyfrowywania
- Sprawdź logi serwera

### Błędy szyfrowania

[](#błędy-szyfrowania)

- Sprawdź format klucza (PEM)
- Zweryfikuj uprawnienia do plików kluczy
- Testuj z wbudowanym kluczem testowym

📞 Wsparcie
----------

[](#-wsparcie)

W przypadku problemów technicznych skontaktuj się z:

- **GitHub Issues**: [sylapi/omnipay-tbibank/issues](https://github.com/sylapi/omnipay-tbibank/issues)

---

Licencja
--------

[](#licencja)

MIT License. Zobacz [LICENSE](LICENSE) aby uzyskać więcej informacji.

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance84

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 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

Every ~4 days

Total

4

Last Release

78d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8284e979dcbb9e6ff013f3e04f2c3f0a3de8f62fad97e12383155779b0adee23?d=identicon)[sylapi](/maintainers/sylapi)

---

Top Contributors

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

###  Code Quality

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/sylapi-omnipay-tbibank/health.svg)

```
[![Health](https://phpackages.com/badges/sylapi-omnipay-tbibank/health.svg)](https://phpackages.com/packages/sylapi-omnipay-tbibank)
```

###  Alternatives

[omnipay/payflow

Payflow driver for the Omnipay payment processing library

20976.8k3](/packages/omnipay-payflow)[omnipay/payfast

PayFast driver for the Omnipay payment processing library

24626.9k3](/packages/omnipay-payfast)[aimeos/ai-payments

Payment extension for Aimeos e-commerce solutions

2160.7k](/packages/aimeos-ai-payments)[swiftmade/omnipay-everypay

(Unofficial) payment gateway for Every Pay (Estonia)

158.7k](/packages/swiftmade-omnipay-everypay)

PHPackages © 2026

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