- $self->map_fields();
- $self->remap_fields(
- type => 'x_Method',
- login => 'x_Login',
- password => 'x_Password',
- transaction_key => 'x_Tran_Key',
- action => 'x_Type',
- description => 'x_Description',
- amount => 'x_Amount',
- currency => 'x_Currency_Code',
- invoice_number => 'x_Invoice_Num',
- order_number => 'x_Trans_ID',
- auth_code => 'x_Auth_Code',
- customer_id => 'x_Cust_ID',
- customer_ip => 'x_Customer_IP',
- last_name => 'x_Last_Name',
- first_name => 'x_First_Name',
- company => 'x_Company',
- address => 'x_Address',
- city => 'x_City',
- state => 'x_State',
- zip => 'x_Zip',
- country => 'x_Country',
- ship_last_name => 'x_Ship_To_Last_Name',
- ship_first_name => 'x_Ship_To_First_Name',
- ship_company => 'x_Company',
- ship_address => 'x_Ship_To_Address',
- ship_city => 'x_Ship_To_City',
- ship_state => 'x_Ship_To_State',
- ship_zip => 'x_Ship_To_Zip',
- ship_country => 'x_Ship_To_Country',
- phone => 'x_Phone',
- fax => 'x_Fax',
- email => 'x_Email',
- card_number => 'x_Card_Num',
- expiration => 'x_Exp_Date',
- cvv2 => 'x_Card_Code',
- check_type => 'x_Echeck_Type',
- account_name => 'x_Bank_Acct_Name',
- account_number => 'x_Bank_Acct_Num',
- account_type => 'x_Bank_Acct_Type',
- bank_name => 'x_Bank_Name',
- routing_code => 'x_Bank_ABA_Code',
- customer_org => 'x_Customer_Organization_Type',
- customer_ssn => 'x_Customer_Tax_ID',
- license_num => 'x_Drivers_License_Num',
- license_state => 'x_Drivers_License_State',
- license_dob => 'x_Drivers_License_DOB',
- recurring_billing => 'x_Recurring_Billing',
- );
-
- my $auth_type = $self->{_content}->{transaction_key}
- ? 'transaction_key'
- : 'password';
-
- if ($self->transaction_type() eq "ECHECK") {
- if ($self->{_content}->{customer_org} ne '') {
- $self->required_fields(qw/type login amount routing_code
- account_number account_type bank_name
- account_name account_type
- customer_org customer_ssn/, $auth_type);
- } else {
- $self->required_fields(qw/type login amount routing_code
- account_number account_type bank_name
- account_name account_type
- license_num license_state license_dob/, $auth_type);
- }
- } elsif ($self->transaction_type() eq 'CC' ) {
- if ( $self->{_content}->{action} eq 'PRIOR_AUTH_CAPTURE' ) {
- if ( $self->{_content}->{order_number}) {
- $self->required_fields(qw/type login action amount/, $auth_type);
- } else {
- $self->required_fields(qw/type login action amount
- card_number expiration/, $auth_type);
- }
- } elsif ( $self->{_content}->{action} eq 'VOID' ) {
- $self->required_fields(qw/login action/,$auth_type);
- } else {
- $self->required_fields(qw/type login action amount last_name
- first_name card_number expiration/, $auth_type);
- }
- } else {
- Carp::croak("AuthorizeNet can't handle transaction type: ".
- $self->transaction_type());
- }
-
- my %post_data = $self->get_fields(qw/x_Login x_Password x_Tran_Key x_Invoice_Num
- x_Description x_Amount x_Cust_ID x_Method x_Type x_Card_Num x_Exp_Date
- x_Card_Code x_Auth_Code x_Echeck_Type x_Bank_Acct_Num
- x_Bank_Account_Name x_Bank_ABA_Code x_Bank_Name x_Bank_Acct_Type
- x_Customer_Organization_Type x_Customer_Tax_ID x_Customer_IP
- x_Drivers_License_Num x_Drivers_License_State x_Drivers_License_DOB
- x_Last_Name x_First_Name x_Company
- x_Address x_City x_State x_Zip
- x_Country
- x_Ship_To_Last_Name x_Ship_To_First_Name x_Ship_To_Company
- x_Ship_To_Address x_Ship_To_City x_Ship_To_State x_Ship_To_Zip
- 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_ADC_Delim_Data'} = 'TRUE';
- $post_data{'x_ADC_URL'} = 'FALSE';
- $post_data{'x_Version'} = '3.1';
-
- my $pd = make_form(%post_data);
- my $s = $self->server();
- my $p = $self->port();
- my $t = $self->path();
- my $r = $self->{_content}->{referer};
- my($page,$server_response,%headers) = post_https($s,$p,$t,$r,$pd);
- #escape NULL (binary 0x00) values
- $page =~ s/\x00/\^0/g;
-
- my $csv = new Text::CSV_XS({ 'binary'=>1 });
- $csv->parse($page);
- my @col = $csv->fields();
-
- $self->server_response($page);
- $self->avs_code($col[5]);
- $self->order_number($col[6]);
- $self->md5($col[37]);
- $self->cvv2_response($col[38]);
- $self->cavv_response($col[39]);
-
- if($col[0] eq "1" ) { # Authorized/Pending/Test
- $self->is_success(1);
- $self->result_code($col[0]);
- $self->authorization($col[4]);
- } else {
- $self->is_success(0);
- $self->result_code($col[2]);
- $self->error_message($col[3]);
- unless ( $self->result_code() ) { #additional logging information
- #$page =~ s/\x00/\^0/g;
- $self->error_message($col[3].
- " DEBUG: No x_response_code from server, ".
- "(HTTPS response: $server_response) ".
- "(HTTPS headers: ".
- join(", ", map { "$_ => ". $headers{$_} } keys %headers ). ") ".
- "(Raw HTTPS content: $page)"
- );
- }
- }