PHP library to communicate with a bank through EBICS protocol.
PHP EBICS Client - https://andrew-svirin.github.io/ebics-client-php/
Supported PHP versions - PHP 7.2 - PHP 8.3
Support EBICS versions: 2.4, 2.5, 3.0; Encryption versions: E002, X002, A005, A006; Switching EBICS T/TS
EBICS API Client - https://sites.google.com/view/ebics-api-client
EBICS Client can be deployed as a standalone service on a webserver or within a Docker container and provides:
andrew-svirin/ebics-client-php is licensed under the MIT License, see the LICENSE file for details
$ composer require andrew-svirin/ebics-client-php
You will need to have this information from your Bank: HostID
, HostURL
, PartnerID
, UserID
<?php
use AndrewSvirin\Ebics\Services\FileKeyringManager;
use AndrewSvirin\Ebics\Models\Bank;
use AndrewSvirin\Ebics\Models\User;
use AndrewSvirin\Ebics\EbicsClient;
use AndrewSvirin\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 AndrewSvirin\Ebics\Contracts\EbicsResponseExceptionInterface;
/* @var \AndrewSvirin\Ebics\EbicsClient $client */
try {
$client->INI();
/* @var \AndrewSvirin\Ebics\Services\FileKeyringManager $keyringManager */
/* @var \AndrewSvirin\Ebics\Models\Keyring $keyring */
$keyringManager->saveKeyring($keyring, $keyringRealPath);
} catch (EbicsResponseExceptionInterface $exception) {
echo sprintf(
"INI request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s",
$exception->getResponseCode(),
$exception->getMessage(),
$exception->getMeaning()
);
}
try {
$client->HIA();
$keyringManager->saveKeyring($keyring, $keyringRealPath);
} catch (EbicsResponseExceptionInterface $exception) {
echo sprintf(
"HIA request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s",
$exception->getResponseCode(),
$exception->getMessage(),
$exception->getMeaning()
);
}
/* @var \AndrewSvirin\Ebics\EbicsClient $client */
$ebicsBankLetter = new \AndrewSvirin\Ebics\EbicsBankLetter();
$bankLetter = $ebicsBankLetter->prepareBankLetter(
$client->getBank(),
$client->getUser(),
$client->getKeyring()
);
$pdf = $ebicsBankLetter->formatBankLetter($bankLetter, $ebicsBankLetter->createPdfBankLetterFormatter());
try {
/* @var \AndrewSvirin\Ebics\EbicsClient $client */
$client->HPB();
/* @var \AndrewSvirin\Ebics\Services\FileKeyringManager $keyringManager */
/* @var \AndrewSvirin\Ebics\Models\Keyring $keyring */
$keyringManager->saveKeyring($keyring, $keyringRealPath);
} 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). |
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. |
FDL | Download the files from the bank. |
FUL | Upload the files to the bank. |
VMK | Download the interim transaction report in SWIFT format (MT942). |
STA | Download the bank account statement. |
C52 | Download the bank account report in Camt.052 format. |
C53 | Download the bank account statement in Camt.053 format. |
C54 | Download Debit Credit Notification (DTI). |
Z52 | Download the bank account report in Camt.052 format (i.e Switzerland financial services). |
Z53 | Download the bank account statement in Camt.053 format (i.e Switzerland financial services). |
Z54 | Download the bank account statement in Camt.054 format (i.e available in Switzerland). |
ZSR | Download Order/Payment Status report. |
XEK | Download account information as PDF-file. |
CCT | Upload initiation of the credit transfer per Single Euro Payments Area. |
CIP | Upload initiation of the instant credit transfer per Single Euro Payments Area. |
XE2 | Upload initiation of the Swiss credit transfer (i.e available in Switzerland). |
XE3 | Upload SEPA Direct Debit Initiation, CH definitions, CORE (i.e available in Switzerland). |
YCT | Upload Credit transfer CGI (SEPA & non SEPA). |
CDD | Upload initiation of the direct debit transaction. |
CDB | Upload initiation of the direct debit transaction for business. |
BTD | Download request files of any BTF structure. |
BTU | Upload the files to the bank. |
HVU | Download List the orders for which the user is authorized as a signatory. |
HVZ | Download VEU overview with additional information. |
HVE | Upload VEU signature for order. |
HVD | Download the state of a VEU order. |
HVT | Download detailed information about an order from VEU processing for which the user is authorized as a signatory. |
If you need to parse Cfonb 120, 240, 360 use andrew-svirin/cfonb-php
If you need to parse MT942 use andrew-svirin/mt942-php
{
"VERSION": "VERSION_24|VERSION_25|VERSION_30",
"USER": {
"A": {
"VERSION": "A005|A006",
"CERTIFICATE": "null|string",
"PUBLIC_KEY": "string",
"PRIVATE_KEY": "string"
},
"E": {
"CERTIFICATE": "null|string",
"PUBLIC_KEY": "string",
"PRIVATE_KEY": "string"
},
"X": {
"CERTIFICATE": "null|string",
"PUBLIC_KEY": "string",
"PRIVATE_KEY": "string"
}
},
"BANK": {
"E": {
"CERTIFICATE": "null|string",
"PUBLIC_KEY": "null|string",
"PRIVATE_KEY": null
},
"X": {
"CERTIFICATE": null,
"PUBLIC_KEY": "null|string",
"PRIVATE_KEY": null
}
}
}