abiturma / php-fints
用于在PHP中使用家庭银行的适配器
Requires
- php: >=8.0
- ext-curl: *
- ext-iconv: *
- ext-mbstring: *
- genkgo/camt: ^2.0.0
- php-curl-class/php-curl-class: ^9.5
- psr/log: ^2.0.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
此包是一个库,用于使用Hbci连接到您的银行以获取银行账户的对账单。
安装
通过composer可用
composer require abiturma/php-fints
使用
初始化
首先,您需要通过提供凭证来创建Fints类的实例
use Abiturma\PhpFints\Fints
...
$fints = Fints::host('https://url-to-your-hbci-endpoint')
->bankCode('yourBankCode)
->username('yourUsername')
->pin('your-secret-pin');
连接的端口默认为443,您可以通过在$fints上调用->port('yourPort')
来更改它。接口是流式的。特别是调用不同初始化方法的顺序无关紧要。
检索您的(sepa)账户列表
初始化Fints后,您可以通过调用$fints->getAccounts()
来获取您的账户列表。此方法返回一个包含您的银行账户的数组,即包含Abiturma\PhpFints\Models\Account
实例的数组,它们的行为类似于laravel模型类。特别是您可以通过调用魔法getter来查询账户数据,例如$account->iban
、$account->bank_code
等。或者您可以在账户上调用->toArray()
,以获取其属性的关联数组。
检索银行账户的对账单
对于特定账户,您可以通过调用$fints->getStatementOfAccount($account)
来获取所有交易列表。您可以可选地传递两个DateTime
对象来限制交易到特定日期范围:$fints->getStatementOfAccount($account, $from, $to)
。结果是类型为Abiturma\PhpFints\Models\Transaction
的对象数组,其行为类似于账户模型。特别是您可以通过调用->toArray()
来检索所有属性。
事务模型中存储的以下属性中的一些
base_amount
交易以分表示的带符号整数值(例如,-120表示-1.20€)amount
交易的带符号浮点值(例如,-1.20)remote_bank_code
远程账户的BICremote_name
债权人/债务人的名称remote_account_number
远程账户的IBANdate
交易的预订日期value_date
交易的值(或货币)日期描述
端到端参考
prima_nota
SWIFT与Camt
默认情况下,如果可能,Fints会尝试以Camt格式获取对账单。有时在解析响应时可能会抛出异常。在这种情况下,明确指定响应格式可能很有用。因此,Fints公开了与getStatementOfAccount
相同的签名的方法getSwiftStatementOfAccount
和getCamtStatementOfAccount
自定义和集成
凭证
每次使用Fints时都提供所有凭证可能相当繁琐。为此,您可以为凭证存储库创建自己的实现,例如可以使用配置存储。在这种情况下,构建您的实现$credentials
,该实现符合Abiturma\PhpFints\Credentials\HoldsCredentials
接口,并注册它
use Abiturma\PhpFints\Credentials\HoldsCredentials
use Abiturma\PhpFints\Fints
class MyCredentials implements HoldsCredentials {
public function host() {
...
}
public function setHost($host) {
...
}
...
}
$credentials = new MyCredentials()
$fints = Fints::useCredentials($credentials)->...
日志记录
默认情况下,不记录出站和入站消息。您可以通过注册一个符合Psr\LoggerInterface
的实现来启用日志记录
use Psr\LoggerInterface
use Abiturma\PhpFints\Fints
class MyLogger implements LoggerInterface {
public function debug() {
...
}
...
}
$logger = new MyLogger();
$fints = Fints::withLogger($logger)->host(...)->...
账户
如果您有您的账户数据(即iban、bic、账户号码、银行代码),则不需要首先调用->getAccounts()
来获取对账单。相反,您只需在需要时创建一个账户实例即可
use Abiturma\PhpFints\Fints
use Abiturma\PhpFints\Models\Account
$account = new Account([
'iban' => 'yourIban',
'bic' => 'yourBic',
'account_number' => 'yourAccountNumber',
'bank_code' => 'yourBankCode'
])
$transactions = Fints::host(...)
->...
->getStatementOfAccount($account)
如果您有自己的账户模型,它可以作为 ->getStatementOfAccount
方法的有效第一个参数,只要它实现了接口 Abiturma\PhpFints\Models\IdentifiesBankAccount
,该接口要求一个方法 ->getAccountAttributes()
,该方法应返回一个具有以下键的关联数组:iban, bic, account_number, bank_code
。
兼容性
这个库仍在开发中,到目前为止只与两家银行进行了测试。您可以在 COMPATIBILITY.md 中找到兼容银行列表。我期待您的贡献,使这个列表更长。
致谢
本项目深受 fints-hbci-php 项目启发,由 Markus Schindler 提供。