abiturma/laravel-fints

用于从laravel获取银行账户对账单的HBCI客户端

2.1.1 2024-04-08 11:50 UTC

This package is auto-updated.

Last update: 2024-09-08 12:52:28 UTC


README

Latest Stable Version Tests License composer.lock

此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 或相应的门面。两者使用方式相同,除了门面的第一个调用是静态的。

初始化

如果没有使用配置,您必须使用 hostportbankCodeusernamepin 方法提供您的连接详细信息。方法可以以任意顺序链接。如果您已在配置文件中指定了其中的一些值,您只需填写缺失的值。

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 远端账户的BIC
  • remote_name 债权人或债务人的姓名
  • remote_account_number 远端账户的IBAN
  • date 交易的入账日期
  • value_date 交易的价值(或汇率)日期
  • 描述
  • 端到端参考
  • prima_nota

SWIFT与Camt比较

默认情况下,如果可能的话,Fints 尝试以Camt格式获取报表。有时,这可能导致解析响应时抛出异常。在这种情况下,明确指定响应格式可能是有用的。因此,Fints 提供了具有与getStatementOfAccount相同签名的getSwiftStatementOfAccountgetCamtStatementOfAccount方法

自定义账户模型

如果您有自己的账户模型,在获取账户报表之前不需要首先调用->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仍在开发中,迄今为止仅与少数几家银行进行了测试。您可以在此处找到已测试银行的列表。

贡献

我期待着您的反馈和建议。