@ISA = qw(Exporter Business::OnlinePayment);
@EXPORT = qw();
@EXPORT_OK = qw();
-$VERSION = '3.16';
+$VERSION = '3.18';
sub set_defaults {
my $self = shift;
$content{'type'} = $types{lc($content{'type'})} || $content{'type'};
$self->transaction_type($content{'type'});
+ # ACCOUNT TYPE MAP
+ my %account_types = ('personal checking' => 'CHECKING',
+ 'personal savings' => 'SAVINGS',
+ 'business checking' => 'CHECKING',
+ 'business savings' => 'SAVINGS',
+ );
+ $content{'account_type'} = $account_types{lc($content{'account_type'})}
+ || $content{'account_type'};
+
$content{'referer'} = defined( $content{'referer'} )
? make_headers( 'Referer' => $content{'referer'} )
: "";
+ if (length $content{'password'} == 15) {
+ $content{'transaction_key'} = delete $content{'password'};
+ }
+
# stuff it back into %content
$self->content(%content);
}
phone => 'x_Phone',
fax => 'x_Fax',
email => 'x_Email',
+ email_customer => 'x_Email_Customer',
card_number => 'x_Card_Num',
expiration => 'x_Exp_Date',
cvv2 => 'x_Card_Code',
x_Ship_To_Country
x_Phone x_Fax x_Email x_Email_Customer x_Country
x_Currency_Code x_Trans_ID/);
- $post_data{'x_Test_Request'} = $self->test_transaction()?"TRUE":"FALSE";
+
+ $post_data{'x_Test_Request'} = $self->test_transaction() ? 'TRUE' : 'FALSE';
+
+ #deal with perl-style bool
+ if ( $post_data{'x_Email_Customer'}
+ && $post_data{'x_Email_Customer'} !~ /^FALSE$/i ) {
+ $post_data{'x_Email_Customer'} = 'TRUE';
+ } else {
+ $post_data{'x_Email_Customer'} = 'FALSE';
+ }
+
$post_data{'x_ADC_Delim_Data'} = 'TRUE';
$post_data{'x_delim_char'} = ',';
$post_data{'x_encap_char'} = '"';
#escape NULL (binary 0x00) values
$page =~ s/\x00/\^0/g;
- my $csv = new Text::CSV_XS({ 'binary'=>1 });
+ #trim 'ip_addr="1.2.3.4"' added by eProcessingNetwork Authorize.Net compat
+ $page =~ s/,ip_addr="[\d\.]+"$//;
+
+ my $csv = new Text::CSV_XS({ binary=>1, escape_char=>'' });
$csv->parse($page);
my @col = $csv->fields();
if($col[0] eq "1" ) { # Authorized/Pending/Test
$self->is_success(1);
$self->result_code($col[0]);
- $self->authorization($col[4]);
+ if ($col[4] =~ /^(.*)\s+(\d+)$/) { #eProcessingNetwork extra bits..
+ $self->authorization($2);
+ } else {
+ $self->authorization($col[4]);
+ }
} else {
$self->is_success(0);
$self->result_code($col[2]);
$tx->content(
type => 'VISA',
login => 'testdrive',
- password => '',
+ password => '', #password or transaction key
action => 'Normal Authorization',
description => 'Business::OnlinePayment test',
amount => '49.95',
$tx->content(
type => 'VISA',
login => 'testdrive',
- password => '',
+ password => '', #password or transaction key
action => 'Authorization Only',
description => 'Business::OnlinePayment test',
amount => '49.95',
For detailed information see L<Business::OnlinePayment>.
+=head1 METHODS AND FUNCTIONS
+
+See L<Business::OnlinePayment> for the complete list. The following methods either override the methods in L<Business::OnlinePayment> or provide additional functions.
+
+=head2 result_code
+
+Returns the response reason code (this is different than the response code).
+
+=head2 error_message
+
+Returns the response reason text.
+
+=head2 server_response
+
+Returns the complete response from the server.
+
=head1 NOTE
Unlike Business::OnlinePayment or pre-3.0 verisons of
key" authentication as well support for the recurring_billing flag and the md5
method that returns the MD5 hash which is returned by the gateway.
+Steve Simitzis contributed a patch for better compatibility with
+eProcessingNetwork's AuthorizeNet compatability mode.
+
=head1 SEE ALSO
perl(1). L<Business::OnlinePayment>.