su_le/bank-statements

Laravel 银行对账单包

此包的规范存储库似乎已消失,因此该包已被冻结。

v1.0.6 2018-03-16 14:28 UTC

This package is not auto-updated.

Last update: 2019-09-21 17:47:21 UTC


README

Laravel 包,用于收集您的银行对账单历史记录。目前支持从 BCAMandiriBNIMUAMALAT 网上银行网站解析对账单历史记录。

**在提交问题之前,请先阅读并确保您理解了所有内容。如果发现错误,请创建问题。

要求

检查 composer.json 文件

支持的 Laravel 版本

  • 5.4.*
  • 5.5.*
  • 5.6.*

安装

$ php composer.phar require sule/bank-statements

安装包后,打开您的 Laravel 配置文件 config/app.php 并添加以下行。

$providers 数组中添加此包的服务提供者。

Sule\BankStatements\Provider\LaravelServiceProvider::class

创建迁移

$ php artisan bank-statements:accounts-table
$ php artisan bank-statements:table

执行迁移

$ php artisan migrate

有关以下 BCA 的说明,您需要修改 config/database.php 文件。添加 modes 以允许不正确的日期格式(例如 2017-03-00)

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => env('DB_STRICT', true),
    // Explicitly enable specific modes, overriding strict setting
    'modes' => [
        'STRICT_TRANS_TABLES',
        'ERROR_FOR_DIVISION_BY_ZERO',
        'NO_AUTO_CREATE_USER',
        'NO_ENGINE_SUBSTITUTION',
        'ALLOW_INVALID_DATES'
    ],
    'engine' => null,
],

代码示例

每个收集器都需要创建一个银行账户数据。首先创建一个。

$accountProvider = app(\Sule\BankStatements\Account::class);

$data = [
    'title'         => 'BCA',
    'url'           => 'https://ibank.klikbca.com',
    'collector'     => 'bca',
    'name'          => 'Your name',
    'user_id'       => 'yourloginuserid',
    'password'      => encrypt('yourloginpassword'),
    'last_activity' => time(),
    'created_at'    => new DateTime(),
    'updated_at'    => new DateTime()
];

$accountProvider->create($data);

可用的收集器

要从注册的网上银行网站账户开始收集(抓取)

// I think 6 days range is good enough
$startOfMonth = (Carbon::now())->startOfMonth();
$startDate    = (Carbon::now())->subDays(6);
$endDate      = Carbon::now();

// Some e-banking websites does not allow us to collect more than a month
// from current date
// Use first date of current month if 6 days are to much
if ($startOfMonth->month != $startDate->month || $startOfMonth->year != $startDate->year) {
    $startDate = $startOfMonth;
}

$statementProvider = app(\Sule\BankStatements\Statement::class);
$statementProvider->collect($startDate, $endDate);

所有收集到的对账单历史记录将被保存到表中,您可以使用以下代码示例查询它们

// Set specific bank account ID if required
$accountId = 0;

// Set specific statement type "CR" or "DB"
$type = '';

// Set specific date range
$fromDate = '';
$toDate   = '';

$statementProvider = app(\Sule\BankStatements\Statement::class);
$collection = $statementProvider->search([
    'bank_account_id' => $accountId, 
    'type'            => $type, 
    'from_date'       => $fromDate, 
    'end_date'        => $toDate, 
    'order_by'        => 'id'
]);

// Then do whatever you want with the collection result

注意

BCA 网上银行网站不提供新对账单(今天)的正确日期,它们将在第二天更新。

每个对账单数据在存储到表中时将有一个唯一的 ID,以确保不会重新创建。有关 BCA 对账单数据,如果在下一次收集过程中找到,则日期将被更新。您可以在每个收集器类中找到用于创建唯一 ID 的数据。

不要在收集器过程中同时手动登录网上银行网站。所有网上银行网站都不允许多次登录尝试。

请确保提供的用户 ID 和密码正确,因为所有网上银行网站在失败三次后都会锁定您的账户。如果失败两次,请先手动成功登录,然后再次尝试收集器过程。

不要通过 cron 调度执行。只在真正需要时执行。因为如果您不知道前一个过程是否真的完成(从网上银行网站注销)或者您的账户可能会因可疑活动而被锁定。

本软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途的适用性或非侵权性的保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任承担责任,无论这些责任是基于合同、侵权或其他原因,以及与软件或其使用或其他方式有关。

配置

大多数配置都可以在您的 .env 文件中覆盖。所有这些都有默认值。

BANK_CLIENT_USER_AGENT
    Web browser user agent going to use for CURL client.
BANK_CLIENT_IP_ADDRESS
    IP Address going to use for CURL client.
BANK_CLIENT_REQUEST_DELAY
    Time delay for each CURL request.
BANK_CLIENT_TIMEOUT
    CURL request timeout.
BANK_CLIENT_DEBUG
    CURL request debug.
BANK_COLLECTOR
    Collector type, currently only support for web parser.
BANK_TEMP_STORAGE_PATH
    Temporary storage path.
DB_CONNECTION
    Database connection going to use.
BANK_ACCOUNTS_TABLE
    Database table to store bank accounts information.
BANK_STATEMENTS_TABLE
    Database table to store bank statements history.

要修改配置文件,首先需要发布默认的配置文件。您可以在 "config/sule/bank-statements.php" 中找到它。

$ php artisan vendor:publish --provider="Sule\BankStatements\Provider\LaravelServiceProvider"

贡献

如何添加您自己的银行收集器(抓取器)

  • 复制 "/src/Collector/Web" 文件夹中的现有收集器类以供参考。
  • 检查 "\Sule\BankStatements\Collector\WebInterface" 以获取所有必需的方法。
  • 将您的新收集器类插入到 "/config/config.php" 文件中。
  • 测试您的新收集器。

欢迎为 Laravel 银行报表库做出贡献

Android 应用

最近发布了一款 Android 应用,可以帮助您查看多个网上银行的交易历史和余额,它叫做 "CekDuit"。

如果您对使用类似 CekDuit 的 Android 应用但担心您的数据安全感兴趣,也可以联系 info@sellerkeys.com 购买源代码。源代码将不包含广告、注册,并且只能检查 BCA + BNI + Mandiri 网上银行,因为 BRI 需要额外的服务器端验证码解决方案。源代码仅供个人使用。您应该具备自行构建和安装到您的 Android 手机中的能力。

CekDuit

使用与该存储库相同的逻辑来收集交易历史,但仅在设备上运行,因此数据仅存储在设备中。源代码目前未开源。

许可

银行报表收集器根据 MIT 许可证 许可。

作者: Sulaeman

贡献者