jorklo / ebics-client-php
PHP库,用于通过EBICS协议与银行进行通信。
2.x-dev
2022-11-15 13:35 UTC
Requires
- php: ^7.4 || ^8
- ext-bcmath: *
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-openssl: *
- ext-zip: *
- ext-zlib: *
Requires (Dev)
- andrew-svirin/cfonb-php: dev-master
- andrew-svirin/mt942-php: dev-master
- mpdf/mpdf: ^8
- phpseclib/phpseclib: ~2.0.35
- phpstan/phpstan: ^1
- phpunit/phpunit: ^9
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- squizlabs/php_codesniffer: ^3
Suggests
- andrew-svirin/cfonb-php: If you need to parse format CFONB from FDL requests.
- andrew-svirin/mt942-php: If you need to parse format MT942 from VMK, STA requests.
- mpdf/mpdf: If you need to generate PDF file letter for Bank.
- psr/http-client: If you want use the PsrHttpClient
- psr/http-factory: If you want use the PsrHttpClient
This package is not auto-updated.
Last update: 2024-10-02 20:51:27 UTC
README
PHP库,通过EBICS协议与银行进行通信。
支持的PHP版本 - PHP 7.2 - PHP 8.1
支持Ebics服务器版本:2.5(默认),3.0
许可证
andrew-svirin/ebics-client-php遵循MIT许可证,有关详细信息,请参阅LICENSE文件
为您的项目开发并集成Ebics
👉👍 联系Andrew Svirin https://www.linkedin.com/in/andriy-svirin-0138a177/
安装
$ composer require andrew-svirin/ebics-client-php
如果您需要解析Cfonb 120、240、360,请使用andrew-svirin/cfonb-php。如果您需要解析MT942,请使用andrew-svirin/mt942-php
初始化客户端
您需要从您的银行获取以下信息
- HostID
- HostURL
- PartnerID
- UserID
<?php use AndrewSvirin\Ebics\Services\FileKeyRingManager; use AndrewSvirin\Ebics\Models\Bank; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\EbicsClient; // Prepare `workspace` dir in the __PATH_TO_WORKSPACES_DIR__ manually. $keyRingRealPath = __PATH_TO_WORKSPACES_DIR__ . '/workspace/keyring.json'; // Use __IS_CERTIFIED__ true for French banks, otherwise use false. $keyRingManager = new FileKeyRingManager(); $keyRing = $keyRingManager->loadKeyRing($keyRingRealPath, __PASSWORD__); $bank = new Bank(__HOST_ID__, __HOST_URL__, __EBICS_SERVER_VERSION___); $bank->setIsCertified(__IS_CERTIFIED__); $user = new User(__PARTNER_ID__, __USER_ID__); $client = new EbicsClient($bank, $user, $keyRing);
执行INI、HIA、HPB请求并更新密钥环。
<?php use AndrewSvirin\Ebics\Contracts\EbicsResponseExceptionInterface; try { /* @var \AndrewSvirin\Ebics\EbicsClient $client */ $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() ); } try { $client->HPB(); $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() ); }
针对法国银行的说明
如果您正在与法国银行打交道,您需要创建一个X509自签名证书。您可以通过创建一个扩展AbstractX509Generator
的类(或者如果您想完全控制生成过程,则实现X509GeneratorInterface
)来实现这一点。
<?php namespace App\Factories\X509; use AndrewSvirin\Ebics\Models\X509\AbstractX509Generator; class MyCompanyX509Generator extends AbstractX509Generator { protected function getCertificateOptions() : array { return [ 'subject' => [ 'DN' => [ 'id-at-countryName' => 'FR', 'id-at-stateOrProvinceName' => 'State', 'id-at-localityName' => 'City', 'id-at-organizationName' => 'Your company', 'id-at-commonName' => 'yourwebsite.tld', ] ], 'extensions' => [ 'id-ce-subjectAltName' => [ 'value' => [ 'dNSName' => '*.yourwebsite.tld', ] ], ], ]; } }
您可以在LegacyX509Generator
类中看到更多值。
一旦创建您的类,请调用X509GeneratorFactory::setGeneratorClass()
方法
<?php //... /* @var \AndrewSvirin\Ebics\EbicsClient $client */ $client->INI(); $client->setX509Generator(new MyCompanyX509Generator);
其他示例
FDL(文件下载)
<?php use AndrewSvirin\Ebics\Exceptions\NoDownloadDataAvailableException; use AndrewSvirin\Ebics\Contracts\EbicsResponseExceptionInterface; try { /* @var \AndrewSvirin\Ebics\EbicsClient $client */ //Fetch data from your bank $fdl = $client->FDL('camt.xxx.cfonb120.stm'); //Plain format (like CFONB) $content = $fdl->getData(); //XML format (Like MT942) $xmlContent = $fdl->getDataDocument(); } } catch (NoDownloadDataAvailableException $exception) { echo "No data to download today !"; } catch (EbicsResponseExceptionInterface $exception) { echo sprintf( "Download failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s", $exception->getResponseCode(), $exception->getMessage(), $exception->getMeaning() ); }
您可以在tests/EbicsTest
中找到更多方法
EBICS压缩文件订单类型(Z53,Z54)。
某些响应以文件列表的形式发送。
/* @var \AndrewSvirin\Ebics\EbicsClient $client */ $z54 = $client->Z54(); $files =$z54->getDataFiles()
全局流程和与银行部门的交互
1. 创建并存储您的3个密钥
<?php use AndrewSvirin\Ebics\Contracts\EbicsResponseExceptionInterface; /* @var \AndrewSvirin\Ebics\EbicsClient $client */ // For French bank or for EBICS 3.0. // MyCompanyX509Generator simple certificate class. Create your own. $client->setX509Generator(new MyCompanyX509Generator); 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() ); }
2. 生成EBICS函件
/* @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());
3. 等待银行验证和访问激活。
4. 获取银行密钥。
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() ); }