PHP library to communicate with a bank through EBICS protocol.
PHP EBICS Client - https://ebics-api.github.io/ebics-client-php/
Supported EBICS versions: 2.4, 2.5, 3.0; Encryption versions: E002, X002, A005, A006; Switching EBICS T/TS
EBICS API Client is a standalone microservice that wraps this library into a ready-to-deploy banking integration solution. Ideal for fintechs, ERPs, payment processors, and enterprises needing a robust EBICS integration without building and maintaining the client layer yourself.
-
π Instant deployment β Docker-based microservice, deploy in minutes.
-
π REST API β Complete EBICS operations via simple HTTP calls. No PHP expertise needed.
-
π§ͺ Dummy EBICS Server β Develop and test your integration locally without a real bank.
Key Value URL https://localhost/ebics-server-stubHost ID EBICSSTUBPartner ID P07User ID U07 -
π€ MCP Server for AI Agents β Connect AI coding assistants directly to your EBICS server.
{ "mcpServers": { "ebics-server": { "type": "remote", "url": "http://localhost/mcp", "headers": { "Authorization": "Key YOUR_API_KEY_HERE" } } } } -
π Admin dashboard β Monitor transactions, manage keys, view logs.
-
π‘οΈ Priority support β Direct access to the development team.
π Try the DEMO Β· Learn more Β· Watch the video
Already using the open-source library and need more? The Premium microservice is the natural next step β no rewrite, same protocol support, zero configuration debt.
ebics-api/ebics-client-php is licensed under the MIT License, see the LICENSE file for details
$ composer require ebics-api/ebics-client-phpYou will need to have this information from your Bank: HostID, HostURL, PartnerID, UserID
<?php
use EbicsApi\Ebics\Factories\KeyringFactory;
use EbicsApi\Ebics\Services\FileKeyringManager;
use EbicsApi\Ebics\Models\Bank;
use EbicsApi\Ebics\Models\User;
use EbicsApi\Ebics\EbicsClient;
use EbicsApi\Ebics\Models\X509\BankX509Generator;
// Prepare `workspace` dir in the __PATH_TO_WORKSPACES_DIR__ manually.
// "__EBICS_VERSION__" should have value "VERSION_30" for EBICS 3.0
$keyringPath = __PATH_TO_WORKSPACES_DIR__ . '/workspace/keyring.json';
$keyringManager = new FileKeyringManager();
if (is_file($keyringPath)) {
$keyring = $keyringManager->loadKeyring($keyringPath, __PASSWORD__, __EBICS_VERSION__);
} else {
$keyring = $keyringManager->createKeyring(__EBICS_VERSION__);
$keyring->setPassword(__PASSWORD__);
}
$bank = new Bank(__HOST_ID__, __HOST_URL__);
// Use __IS_CERTIFIED__ true for EBICS 3.0 and/or French banks, otherwise use false.
if(__IS_CERTIFIED__) {
$certificateGenerator = (new BankX509Generator());
$certificateGenerator->setCertificateOptionsByBank($bank);
$keyring->setCertificateGenerator($certificateGenerator);
}
$user = new User(__PARTNER_ID__, __USER_ID__);
$client = new EbicsClient($bank, $user, $keyring);
if (!is_file($keyringPath)) {
$client->createUserSignatures();
$keyringManager->saveKeyring($client->getKeyring(), $keyringPath);
}<?php
use EbicsApi\Ebics\Contracts\EbicsResponseExceptionInterface;
/* @var \EbicsApi\Ebics\EbicsClient $client */
try {
$client->executeStandardOrder(new \EbicsApi\Ebics\Orders\INI());
/* @var \EbicsApi\Ebics\Services\FileKeyringManager $keyringManager */
/* @var \EbicsApi\Ebics\Models\Keyring $keyring */
$keyringManager->saveKeyring($keyring, $keyringPath);
} catch (EbicsResponseExceptionInterface $exception) {
echo sprintf(
"INI request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s",
$exception->getResponseCode(),
$exception->getMessage(),
$exception->getMeaning()
);
}
try {
$client->executeStandardOrder(new \EbicsApi\Ebics\Orders\HIA());
$keyringManager->saveKeyring($keyring, $keyringPath);
} catch (EbicsResponseExceptionInterface $exception) {
echo sprintf(
"HIA request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s",
$exception->getResponseCode(),
$exception->getMessage(),
$exception->getMeaning()
);
}/* @var \EbicsApi\Ebics\EbicsClient $client */
$ebicsBankLetter = new \EbicsApi\Ebics\EbicsBankLetter();
$bankLetter = $ebicsBankLetter->prepareBankLetter(
$client->getBank(),
$client->getUser(),
$client->getKeyring()
);
$pdf = $ebicsBankLetter->formatBankLetter($bankLetter, $ebicsBankLetter->createPdfBankLetterFormatter());try {
/* @var \EbicsApi\Ebics\EbicsClient $client */
$client->executeInitializationOrder(new \EbicsApi\Ebics\Orders\HPB());
/* @var \EbicsApi\Ebics\Services\FileKeyringManager $keyringManager */
/* @var \EbicsApi\Ebics\Models\Keyring $keyring */
$keyringManager->saveKeyring($keyring, $keyringPath);
} catch (EbicsResponseExceptionInterface $exception) {
echo sprintf(
"HPB request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s",
$exception->getResponseCode(),
$exception->getMessage(),
$exception->getMeaning()
);
}| Transaction | Description |
|---|---|
| HEV | Download supported protocol versions for the Bank. |
| INI | Send to the bank public signature of signature A005. |
| HIA | Send to the bank public signatures of authentication (X002) and encryption (E002). |
| H3K | Send to the bank public signatures of signature (A005), authentication (X002) and encryption (E002). |
| HCS | Upload for renewing user certificates. |
| HPB | Download the Bank public signatures authentication (X002) and encryption (E002). |
| SPR | Suspend activated keyring. |
| HPD | Download the bank server parameters. |
| HKD | Download customer's customer and subscriber information. |
| HTD | Download subscriber's customer and subscriber information. |
| HAA | Download Bank available order types. |
| PTK | Download transaction status (Plain text). |
| HAC | Download transaction status (XML). |
| FDL | Download the files from the bank. |
| FUL | Upload the files to the bank. |
| BTD | Download request files of any BTF structure. |
| BTU | Upload the files to the bank. |
If you need to parse Cfonb 120, 240, 360 use ebics-api/cfonb-php
If you need to parse MT942 use ebics-api/mt942-php

