su_le / bank-statements
Laravel 银行对账单包
此包的规范存储库似乎已消失,因此该包已被冻结。
Requires
- php: ^5.5.9 || ^7.0
- guzzlehttp/guzzle: ~6.2.2
- illuminate/config: 5.4.* || 5.5.* || 5.6.*
- illuminate/console: 5.4.* || 5.5.* || 5.6.*
- illuminate/database: 5.4.* || 5.5.* || 5.6.*
- illuminate/filesystem: 5.4.* || 5.5.* || 5.6.*
- illuminate/support: 5.4.* || 5.5.* || 5.6.*
- nesbot/carbon: ^1.0
- ramsey/uuid: ^3.5.2
Requires (Dev)
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.0
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2019-09-21 17:47:21 UTC
README
Laravel 包,用于收集您的银行对账单历史记录。目前支持从 BCA、Mandiri、BNI 和 MUAMALAT 网上银行网站解析对账单历史记录。
**在提交问题之前,请先阅读并确保您理解了所有内容。如果发现错误,请创建问题。
要求
检查 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);
可用的收集器
- bca, 网址: https://ibank.klikbca.com
- mandiri, 网址: https://ib.bankmandiri.co.id
- bni-mobile, 网址: https://ibank.bni.co.id/MBAWeb/FMB
- muamalat, 网址: https://ib.muamalatbank.com
要从注册的网上银行网站账户开始收集(抓取)
// 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 手机中的能力。
使用与该存储库相同的逻辑来收集交易历史,但仅在设备上运行,因此数据仅存储在设备中。源代码目前未开源。
许可
银行报表收集器根据 MIT 许可证 许可。
作者: Sulaeman
贡献者