abiturma / laravel-fints
用于从laravel获取银行账户对账单的HBCI客户端
Requires
- php: >=8.0
- abiturma/php-fints: ^2.0
- illuminate/config: ^8.0|^9.0|^10.0|^11.0
- illuminate/console: ^8.0|^9.0|^10.0|^11.0
- illuminate/encryption: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
- psr/log: ^2.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.0
README
此Laravel包是Php-Fints的包装器,它提供了Hbci连接到您的银行,以便获取您的银行账户对账单。有关Php-Fints的更多详细信息,请参阅其文档。
安装
此包需要PHP 8.0和Laravel 8.0或更高版本。如果您使用的PHP版本低于8.0或Laravel版本低于8.0,请使用此包的旧版本。
通过composer提供
composer require abiturma/laravel-fints
安装后,通过调用以下命令发布配置文件:
php artisan vendor:publish --provider="Abiturma\LaravelFints\FintsServiceProvider"
.
您可以在 config/laravel-fints.php
下找到它。
配置
凭证/连接
您可以选择在 laravel-fints.php
(不推荐)或 .env
中设置您的凭证。不推荐在 .env
文件中以未加密的形式存储您的银行PIN。
PIN加密
要加密您的PIN,请在您的配置文件中将 encrypt_pin => true
设置为true。要加密您的PIN,请运行 php artisan fints:encryt_pin
,在提示时输入您的PIN,并将结果复制到您的 .env
文件中。请注意,PIN加密仅提供非常有限的安全性,因为加密密钥存储在同一个文件中。为了获得更好的安全性,建议在每次请求时从用户那里获取PIN(见下文)。
日志记录
默认情况下,日志记录是关闭的。要启用日志记录,请将 laravel-fints.logging.enabled
设置为true。在这种情况下,将使用laravel的默认日志记录通道。要选择自己的日志记录实现,请将类名提供给 laravel-fints.logging.logger
。
注意!请注意,调试级别的日志记录可能会在日志记录通道中暴露您的未加密PIN。
使用方法
您可以使用类 Abiturma\LaravelFints\Fints
或相应的门面。两者使用方式相同,除了门面的第一个调用是静态的。
初始化
如果没有使用配置,您必须使用 host
、port
、bankCode
、username
和 pin
方法提供您的连接详细信息。方法可以以任意顺序链接。如果您已在配置文件中指定了其中的一些值,您只需填写缺失的值。
use Fints;
...
$fints = Fints::username('my-username')->pin('my-secret-pin');
获取您的(SEPA)账户列表
初始化 Fints
后,您可以调用 $fints->getAccounts()
获取您的账户列表。如果初始化由配置处理,您将按如下方式调用门面:
use Fints;
...
$accounts = Fints::getAccounts()
此方法返回您的银行账户的集合,即 Abiturma\PhpFints\Models\Account
实例的数组,它们的行为类似于laravel模型类。特别是它们有魔法获取器,可以使用 ->toArray()
转换为数组。
获取银行账户的对账单
对于特定账户,您可以通过调用 $fints->getStatementOfAccount($account)
获取所有交易列表。您可以可选地传递两个 Carbon
对象以限制交易到特定日期范围:$fints->getStatementOfAccount($account, $from, $to)
。结果是类型为 Abiturma\PhpFints\Models\Transaction
的对象集合,它们的行为类似于laravel模型。特别是您可以通过调用 ->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
方法
自定义账户模型
如果您有自己的账户模型,在获取账户报表之前不需要首先调用->getAccounts()
。相反,您可以使用您的账户模型,并通过提供一个返回形式为的数组的方法getAccountAttributes()
使其实现Abiturma\LaravelFints\IdentifiesBankAccount
[
'iban' => 'Iban of the according account',
'bic' => 'Bic of the according account',
'account_number' => 'AccountNumber of the according account',
'bank_code' => 'BankCode of the according account'
]
例如,一个实现可能看起来像这样
use Illuminate\Database\Eloquent\Model;
use Abiturma\LaravelFints\IdentifiesBankAccount;
class MyAccount extends Model implements IdentifiesBankAccount {
...
public function getAccountAttributes() {
return [
'iban' => $this->iban,
'bic' => $this->bic,
'account_number' => $this->account_number,
'bank_code' => $this->bank_code
]
}
}
兼容性
底层hbci-library仍在开发中,迄今为止仅与少数几家银行进行了测试。您可以在此处找到已测试银行的列表。
贡献
我期待着您的反馈和建议。