Business-OnlinePayment-Litle
view release on metacpan or search on metacpan
lib/Business/OnlinePayment/Litle.pm view on Meta::CPAN
my %content = $self->content();
warn 'Pre processing: '.Dumper(\%content) if $DEBUG;
my $req = $self->map_request( \%content );
warn 'Post processing: '.Dumper(\%content) if $DEBUG;
my $post_data;
my $writer = XML::Writer->new(
OUTPUT => \$post_data,
DATA_MODE => 1,
DATA_INDENT => 2,
ENCODING => 'utf-8',
);
## set the authentication data
tie my %authentication, 'Tie::IxHash',
$self->_revmap_fields(
content => \%content,
user => 'login',
password => 'password',
);
warn Dumper($req) if $DEBUG;
## Start the XML Document, parent tag
$writer->xmlDecl();
$writer->startTag(
"litleOnlineRequest",
version => $self->api_version,
xmlns => $self->xmlns,
merchantId => $content{'merchantid'},
);
$self->_xmlwrite( $writer, 'authentication', \%authentication );
## partial capture modifier, odd location, because it modifies the start tag :(
my %extra;
if ($content{'TransactionType'} eq 'capture'){
$extra{'partial'} = $content{'partial'} ? 'true' : 'false';
}
$writer->startTag(
$content{'TransactionType'},
id => $content{'invoice_number'},
reportGroup => $content{'report_group'} || 'BOP',
customerId => $content{'customer_id'} || 1,
%extra,
);
foreach ( keys( %{$req} ) ) {
$self->_xmlwrite( $writer, $_, $req->{$_} );
}
$writer->endTag( $content{'TransactionType'} );
$writer->endTag("litleOnlineRequest");
$writer->end();
## END XML Generation
$self->server_request( $post_data );
warn $self->server_request if $DEBUG;
if ( $] ge '5.008' ) {
# http_post expects data in this format
utf8::encode($post_data) if utf8::is_utf8($post_data);
}
my ( $page, $status_code, %headers ) = $self->https_post( { 'Content-Type' => 'text/xml; charset=utf-8' } , $post_data);
$self->server_response( $page );
warn Dumper $self->server_response, $status_code, \%headers if $DEBUG;
my $response = $self->_parse_xml_response( $page, $status_code );
$content{'TransactionType'} =~ s/Request$//; # no clue why some of the types have a Request and some do not
if ( exists( $response->{'response'} ) && $response->{'response'} == 1 ) {
## parse error type error
warn Dumper 'https://'.$self->server.':'.$self->port.$self->path,$response, $self->server_request;
$self->error_message( $response->{'message'} );
return;
} else {
$self->error_message(
$response->{ $content{'TransactionType'} . 'Response' }
->{'message'} );
}
$self->{_response} = $response;
warn Dumper($response) if $DEBUG;
## Set up the data:
my $resp = $response->{ $content{'TransactionType'} . 'Response' };
$self->{_response} = $resp;
$self->card_token( $resp->{'litleToken'} || $resp->{'tokenResponse'}->{'litleToken'} || $content{'card_token'} || '' );
$self->order_number( $resp->{'litleTxnId'} || '' );
$self->result_code( $resp->{'response'} || '' );
$resp->{'authCode'} =~ s/\D//g if $resp->{'authCode'};
$self->authorization( $resp->{'authCode'} || '' );
$self->cvv2_response( $resp->{'fraudResult'}->{'cardValidationResult'}
|| '' );
$self->avs_code( $resp->{'fraudResult'}->{'avsResult'} || '' );
if( $resp->{enhancedAuthResponse}
&& $resp->{enhancedAuthResponse}->{fundingSource}
&& $resp->{enhancedAuthResponse}->{fundingSource}->{type} eq 'PREPAID' ) {
$self->is_prepaid(1);
$self->prepaid_balance( $resp->{enhancedAuthResponse}->{fundingSource}->{availableBalance} );
} else {
$self->is_prepaid(0);
}
#$self->is_dupe( $resp->{'duplicate'} ? 1 : 0 );
if( defined $resp->{'duplicate'} && $resp->{'duplicate'} eq 'true' ) {
$self->is_duplicate(1);
}
else {
$self->is_duplicate(0);
}
if( defined $resp->{tokenResponse} ) {
$self->card_token($resp->{tokenResponse}->{litleToken});
$self->card_token_response($resp->{tokenResponse}->{tokenResponseCode});
$self->card_token_message($resp->{tokenResponse}->{tokenMessage});
( run in 1.137 second using v1.01-cache-2.11-cpan-d80b1682f3f )