Steven Haryanto > Finance-Bank-ID-Mandiri-0.27 > Finance::Bank::ID::Mandiri

Download:
Finance-Bank-ID-Mandiri-0.27.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.27   Source  

NAME ^

Finance::Bank::ID::Mandiri - Check your Bank Mandiri accounts from Perl

VERSION ^

version 0.27

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::Any. to show logs, use something like:
    use Log::Log4perl qw(:easy);
    use Log::Any::Adapter;
    Log::Log4perl->easy_init($DEBUG);
    Log::Any::Adapter->set('Log4perl');

    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";
        }
    };

    # remember to call this, otherwise you will have trouble logging in again
    # for some time
    if ($ibank->logged_in) { $ibank->logout() }

    # utility routines
    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.

This module uses Log::Any, so you can see more debugging statements on your screen, log files, etc.

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:

login()

Login to the net banking site. You actually do not have to do this explicitly as login() is called by other methods like check_balance() or get_statement().

If login is successful, logged_in will be set to true and subsequent calls to login() will become a no-op until logout() is called.

Dies on failure.

logout()

Logout from the net banking site. You need to call this at the end of your program, otherwise the site will prevent you from re-logging in for some time (e.g. 10 minutes).

If logout is successful, logged_in will be set to false and subsequent calls to logout() will become a no-op until login() is called.

Dies on failure.

list_accounts()

check_balance([$acct])

get_statement(%args) => $stmt

Get account statement. %args keys:

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:

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.

HOMEPAGE ^

Please visit the project's homepage at https://metacpan.org/release/Finance-Bank-ID-Mandiri.

SOURCE ^

Source repository is at https://github.com/sharyanto/perl-Finance-Bank-ID-Mandiri.

BUGS ^

Please report any bugs or feature requests on the bugtracker website http://rt.cpan.org/Public/Dist/Display.html?Name=Finance-Bank-ID-Mandiri

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.

AUTHOR ^

Steven Haryanto <stevenharyanto@gmail.com>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2013 by Steven Haryanto.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

syntax highlighting: