Finance-Bank-ID-Mandiri
view release on metacpan or search on metacpan
VERSION
This document describes version 0.383 of Finance::Bank::ID::Mandiri
(from Perl distribution Finance-Bank-ID-Mandiri), released on
2021-08-26.
SYNOPSIS
If you just want to download banking statements, and you use Linux/Unix,
you might want to use the download-mandiri script instead of having to
deal with this library directly.
If you want to use the library in your Perl application:
use Finance::Bank::ID::Mandiri;
# FBI::Mandiri uses Log::ger. to show logs, use something like:
use Log::ger::Output 'Screen';
my $ibank = Finance::Bank::ID::Mandiri->new(
username => '....', # optional if you're only using parse_statement()
password => '....', # idem
verify_https => 1, # default is 0
#https_ca_dir => '/etc/ssl/certs', # default is already /etc/ssl/certs
);
eval {
$ibank->login(); # dies on error
my $accts = $ibank->list_accounts();
my $bal = $ibank->check_balance($acct); # $acct is optional
my $stmt = $ibank->get_statement(
account => ..., # opt, default account used if not undef
days => 30, # opt
start_date => DateTime->new(year=>2009, month=>10, day=>6),
# opt, takes precedence over 'days'
end_date => DateTime->today, # opt, takes precedence over 'days'
);
print "Transactions: ";
for my $tx (@{ $stmt->{transactions} }) {
print "$tx->{date} $tx->{amount} $tx->{description}\n";
}
};
warn if $@;
# remember to call this, otherwise you will have trouble logging in again
# for some time
$ibank->logout;
Utility routines:
# parse HTML statement directly
my $res = $ibank->parse_statement($html);
DESCRIPTION
This module provide a rudimentary interface to the web-based online
banking interface of the Indonesian Bank Mandiri at
https://ib.bankmandiri.co.id (henceforth IB). You will need either
Crypt::SSLeay or IO::Socket::SSL installed for HTTPS support to work
(and strictly Crypt::SSLeay to enable certificate verification).
WWW::Mechanize is required but you can supply your own mech-like object.
Aside from the above site for invididual accounts, there are also 2
other sites for corporate accounts:
https://cms.bankmandiri.co.id/ecbanking/ (henceforth CMS) and
https://mcm.bankmandiri.co.id/ (henceforth MCM). CMS is the older
version and as of the end of Sept, 2010 has been discontinued.
This module currently can only login to IB and not CMS/MCM, but this
module can parse statement page from all 3 sites. For CMS version, only
text version [copy paste result] is currently supported and not HTML.
For MCM, only semicolon format is currently supported.
Warning: This module is neither offical nor is it tested to be 100%
safe! Because of the nature of web-robots, everything may break from one
day to the other when the underlying web interface changes.
WARNING
This warning is from Simon Cozens' "Finance::Bank::LloydsTSB", and seems
just as apt here.
This is code for online banking, and that means your money, and that
means BE CAREFUL. You are encouraged, nay, expected, to audit the source
of this module yourself to reassure yourself that I am not doing
anything untoward with your banking data. This software is useful to me,
but is provided under NO GUARANTEE, explicit or implied.
ERROR HANDLING AND DEBUGGING
Most methods die() when encountering errors, so you can use eval() to
trap them.
Full response headers and bodies are dumped to a separate logger. See
documentation on "new()" below and the sample script in examples/
subdirectory in the distribution.
ATTRIBUTES
METHODS
new(%args)
Create a new instance. %args keys:
* username
Optional if you are just using utility methods like
"parse_statement()" and not "login()" etc.
* password
Optional if you are just using utility methods like
"parse_statement()" and not "login()" etc.
* mech
Optional. A WWW::Mechanize-like object. By default this module
instantiate a new Finance::BankUtils::ID::Mechanize (a
WWW::Mechanize subclass) object to retrieve web pages, but if you
want to use a custom/different one, you are allowed to do so here.
Use cases include: you want to retry and increase timeout due to
slow/unreliable network connection (using
WWW::Mechanize::Plugin::Retry), you want to slow things down using
Optional. Default is "end_date" - 1 month, which seems to be the
current limit set by the bank (for example, if "end_date" is
2013-03-08, then "start_date" will be set to 2013-02-08). If not set
and "days" is set, will be set to "end_date" - "days".
* end_date
Optional. Default is today (or some 1+ days from today if today is a
Saturday/Sunday/holiday, depending on the default value set by the
site's form).
parse_statement($html, %opts) => $res
Given the HTML of the account statement results page, parse it into
structured data:
$stmt = {
start_date => $start_dt, # a DateTime object
end_date => $end_dt, # a DateTime object
account_holder => STRING,
account => STRING, # account number
currency => STRING, # 3-digit currency code
transactions => [
# first transaction
{
date => $dt, # a DateTime object, book date ("tanggal pembukuan")
seq => INT, # a number >= 1 which marks the sequence of transactions for the day
amount => REAL, # a real number, positive means credit (deposit), negative means debit (withdrawal)
description => STRING,
branch => STRING, # 4-digit branch/ATM code, only for MCM
},
# second transaction
...
]
}
Returns:
[$status, $err_details, $stmt]
$status is 200 if successful or some other 3-letter code if parsing
failed. $stmt is the result (structure as above, or undef if parsing
failed).
Options:
* return_datetime_obj => BOOL
Default is true. If set to false, the method will return dates as
strings with this format: 'YYYY-MM-DD HH::mm::SS' (produced by
DateTime->dmy . ' ' . DateTime->hms). This is to make it easy to
pass the data structure into YAML, JSON, MySQL, etc. Nevertheless,
internally DateTime objects are still used.
Additional notes:
The method can also (or used to) handle copy-pasted text from the GUI
browser, but this is no longer documented or guaranteed to keep working.
FAQ
(2014) I'm getting error message: "Can't connect to ib.bankmandiri.co.id:443 at ..."
Try upgrading your IO::Socket::SSL. It stalls with IO::Socket::SSL
version 1.76, but works with newer versions (e.g. 1.989).
HOMEPAGE
Please visit the project's homepage at
<https://metacpan.org/release/Finance-Bank-ID-Mandiri>.
SOURCE
Source repository is at
<https://github.com/perlancar/perl-Finance-Bank-ID-Mandiri>.
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTORS
* Steven Haryanto (on PC) <stevenharyanto@gmail.com>
* Steven Haryanto <steven@masterweb.net>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull
requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You
can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally
on your system), you can install Dist::Zilla,
Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two
other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional
steps required beyond that are considered a bug and can be reported to
me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2021, 2019, 2017, 2016, 2015, 2014, 2013,
2012, 2011, 2010 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website
<https://rt.cpan.org/Public/Dist/Display.html?Name=Finance-Bank-ID-Mandi
ri>
When submitting a bug or request, please include a test-file or a patch
to an existing test-file that illustrates the bug or desired feature.
( run in 2.720 seconds using v1.01-cache-2.11-cpan-5a3173703d6 )