Finance-Card-Discover
view release on metacpan or search on metacpan
lib/Finance/Card/Discover.pm view on Meta::CPAN
my $dump_sub = sub { $_[0]->dump(maxlength => 0); return };
$self->ua->set_my_handler(request_send => $dump_sub);
$self->ua->set_my_handler(response_done => $dump_sub);
}
elsif ($self->{compress}) {
$self->ua->default_header(accept_encoding => 'gzip,deflate');
}
return $self;
}
sub ua {
my ($self, $ua) = @_;
if ($ua) {
croak q('ua' must be (or derived from) an LWP::UserAgent')
unless ref $ua and $ua->isa(q(LWP::UserAgent));
$self->{ua} = $ua;
}
return $self->{ua};
}
sub response { $_[0]->{response} }
sub accounts {
my ($self) = @_;
my $data = $self->_request(
msgnumber => -1,
request => 'getcards',
);
return unless $data and $data->{Total};
require Finance::Card::Discover::Account;
return map {
Finance::Card::Discover::Account->new($data, $_, card => $self)
} (1 .. $data->{Total});
}
sub _request {
my ($self, @params) = @_;
my $uri = URI->new('https://deskshop.discovercard.com/');
$uri->path('/cardmembersvcs/orbiscom/WebServlet');
# Non-standard url encoding- [.-] need escaping, perhaps others.
(local $URI::uric = $URI::uric) =~ s/\\[.-]//g;
$uri->query_form(
version => '1.0',
startTime => 20 + int rand 100,
user => $self->{username},
password => $self->{password},
@params,
);
my $res = $self->{response} = $self->ua->post($uri);
return unless $res->is_success;
# The response content is a url-encoded string.
my %data = do {
my $u = URI->new;
$u->query($res->decoded_content);
$u->query_form
};
return if not %data or 'error' eq $data{action};
return \%data;
}
1;
__END__
=head1 NAME
Finance::Card::Discover - DiscoverCard account information and SOAN creation
=head1 SYNOPSIS
use Finance::Card::Discover;
my $card = Finance::Card::Discover->new(
username => 'Your Username',
password => 'Your Password',
);
for my $account ($card->accounts) {
my $number = $account->number;
my $expiration = $account->expiration;
printf "account: %s %s\n", $number, $expiration;
my $balance = $account->balance;
my $profile = $account->profile;
my @transactions = $account->transactions;
if (my $soan = $account->soan) {
my $number = $soan->number;
my $cid = $soan->cid;
printf "soan: %s %s\n", $number, $cid;
}
else {
# SOAN request failed, see why.
croak $account->card->response->dump;
}
for my $transaction ($account->soan_transactions) {
my $date = $transaction->date;
my $merchant = $transaction->merchant;
my $amount = $transaction->amount;
printf "transaction: %s %s %s\n", $date, $amount, $merchant;
}
}
=head1 DESCRIPTION
The C<Finance::Card::Discover> module provides access to DiscoverCard
account information and enables the creation of Secure Online Access
Numbers.
=head1 METHODS
( run in 0.879 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )