X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=AuthorizeNet.pm;h=c9cebaa28138863332bde43010f57d5d4038210c;hb=63544739784abac4d9740323b609e554d58584e6;hp=a8576ee3dc35875895f5a5e4682b1106746f7d45;hpb=5c45b7c673c0f047dbdb609ad0bf11b52d6918ce;p=Business-OnlinePayment-AuthorizeNet.git diff --git a/AuthorizeNet.pm b/AuthorizeNet.pm index a8576ee..c9cebaa 100644 --- a/AuthorizeNet.pm +++ b/AuthorizeNet.pm @@ -9,10 +9,10 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); require Exporter; -@ISA = qw(Exporter AutoLoader Business::OnlinePayment); +@ISA = qw(Exporter Business::OnlinePayment); @EXPORT = qw(); @EXPORT_OK = qw(); -$VERSION = '3.15'; +$VERSION = '3.18'; sub set_defaults { my $self = shift; @@ -50,10 +50,23 @@ sub map_fields { $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); } @@ -105,7 +118,7 @@ sub submit { country => 'x_Country', ship_last_name => 'x_Ship_To_Last_Name', ship_first_name => 'x_Ship_To_First_Name', - ship_company => 'x_Company', + ship_company => 'x_Ship_To_Company', ship_address => 'x_Ship_To_Address', ship_city => 'x_Ship_To_City', ship_state => 'x_Ship_To_State', @@ -114,6 +127,7 @@ sub submit { 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', @@ -143,10 +157,12 @@ sub submit { push @required_fields, qw( amount routing_code account_number account_type bank_name - account_name account_type + account_name ); - if ($self->{_content}->{customer_org} ne '') { + if (defined $self->{_content}->{customer_org} and + length $self->{_content}->{customer_org} + ) { push @required_fields, qw( customer_org customer_ssn ); } else { push @required_fields, qw(license_num license_state license_dob); @@ -191,7 +207,17 @@ sub submit { 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'} = '"'; @@ -207,7 +233,10 @@ sub submit { #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(); @@ -221,7 +250,11 @@ sub submit { 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]); @@ -258,7 +291,7 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin $tx->content( type => 'VISA', login => 'testdrive', - password => '', + password => '', #password or transaction key action => 'Normal Authorization', description => 'Business::OnlinePayment test', amount => '49.95', @@ -293,7 +326,7 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin $tx->content( type => 'VISA', login => 'testdrive', - password => '', + password => '', #password or transaction key action => 'Authorization Only', description => 'Business::OnlinePayment test', amount => '49.95', @@ -360,6 +393,22 @@ Content required: type, login, password|transaction_key, action, amount, first_n For detailed information see L. +=head1 METHODS AND FUNCTIONS + +See L for the complete list. The following methods either override the methods in L 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 @@ -390,9 +439,9 @@ aren't denied due to a lack of address information. =head1 COMPATIBILITY -This module implements Authorize.Net's API verison 3.1 using the ADC -Direct Response method. See -https://secure.authorize.net/docs/developersguide.pml for details. +This module implements Authorize.Net's API verison 3.1 using the Advanced +Integration Method (AIM), formerly known as ADC Direct Response. See +http://www.authorize.net/support/AIM_guide.pdf for details. =head1 AUTHOR @@ -416,9 +465,12 @@ Paul Zimmer sent in a patch for card-less post authorizations. Daemmon Hughes sent in a patch for "transaction -key" authentication as well support for the recurring_billing flag and the md5' +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.