andrew-svirin/ebics-client-php

PHP库,用于通过EBICS协议与银行通信。

v2.1.2 2023-08-16 18:19 UTC

README

CI Latest Stable Version Total Downloads License

PHP库,用于通过EBICS协议与银行通信。
支持的PHP版本 - PHP 7.2 - PHP 8.3
支持Ebics服务器版本:2.4(部分)、2.5(默认)、3.0

💥应用程序可以作为Docker容器中的独立服务使用,并通过REST API交互 - https://www.youtube.com/watch?v=756lkDwKtO4

许可协议

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

初始化客户端

您需要从银行获取以下信息:HostIDHostURLPartnerIDUserID

<?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 EBICS 3.0 and/or French banks, otherwise use false.
$keyringManager = new FileKeyringManager();
$keyring = $keyringManager->loadKeyring($keyringRealPath, __PASSWORD__, __EBICS_VERSION__);
$bank = new Bank(__HOST_ID__, __HOST_URL__);
$bank->setIsCertified(__IS_CERTIFIED__);
$user = new User(__PARTNER_ID__, __USER_ID__);
$client = new EbicsClient($bank, $user, $keyring);

关于法国银行和Ebics 3.0的说明

如果您正在与法国银行或Ebics 3.0打交道,您需要创建一个X509自签名证书。您可以通过创建一个继承自AbstractX509Generator的类并使用__IS_CERTIFIED__ = true来实现这一点

<?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',
                    ]
                ],
            ],
        ];
    }
}

$client->setX509Generator(new MyCompanyX509Generator);

全局流程和与银行部门的互动

1. 创建并存储您的3个密钥

<?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()
    );
}

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()
    );
}

5. 进行其他交易!

如果您需要解析CFonb 120、240、360,请使用andrew-svirin/cfonb-php
如果您需要解析MT942,请使用andrew-svirin/mt942-php

##待办事项

  • 为所有可用的ISO 20022格式提供格式验证器
    • 上传:PAIN.001、PAIN.008、MT101、TA875、CFONB320、CFONB160的不同版本。
    • 下载:PAIN.002、CAMT.052、CAMT.053、CAMT.054、MT199、MT900、MT910、MT940、MT942、CFONB240、CFONB245、CFONB120
  • 改进FakerHttpClient
  • 支持导入3SKey证书
  • 支持更改Keyring的密码