package Business::OnlinePayment::AuthorizeNet;
-# $Id: AuthorizeNet.pm,v 1.5 2002-02-16 06:54:36 thalakan Exp $
+# $Id: AuthorizeNet.pm,v 1.10 2002-04-24 05:02:54 ivan Exp $
use strict;
use Business::OnlinePayment;
@ISA = qw(Exporter AutoLoader Business::OnlinePayment);
@EXPORT = qw();
@EXPORT_OK = qw();
-$VERSION = '3.02';
+$VERSION = '3.11';
sub set_defaults {
my $self = shift;
$self->server('secure.authorize.net');
$self->port('443');
$self->path('/gateway/transact.dll');
+
+ $self->build_subs('order_number'); #no idea how it worked for jason w/o this
}
sub map_fields {
first_name account_number routing_code
bank_name/);
} elsif($self->transaction_type() eq 'CC' ) {
+ if ( $self->{_content}->{action} eq 'PRIOR_AUTH_CAPTURE' ) {
+ $self->required_fields(qw/type login password action amount
+ card_number expiration/);
+ } else {
$self->required_fields(qw/type login password action amount last_name
first_name card_number expiration/);
+ }
} else {
Carp::croak("AuthorizeNet can't handle transaction type: ".
$self->transaction_type());
$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.0';
+ $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($page,$server_response,%headers) = post_https($s,$p,$t,'',$pd);
+ #escape NULL (binary 0x00) values
+ $page =~ s/\x00/\^0/g;
my $csv = new Text::CSV_XS();
$csv->parse($page);
$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)"
+ );
+ }
}
}
=head1 NOTE
-Unlike Business::OnlinePayment or previous verisons of
-Business::OnlinePayment::AuthorizeNet, 3.0 requires separate first_name and
+Unlike Business::OnlinePayment or pre-3.0 verisons of
+Business::OnlinePayment::AuthorizeNet, 3.1 requires separate first_name and
last_name fields.
To settle an authorization-only transaction (where you set action to
valid address information for your customer (such as in an IVR
application), you must disable address verification in the Merchant
Menu page at https://secure.authorize.net/ so that the transactions
-aren't denied due to a lack of addres information.
+aren't denied due to a lack of address information.
=head1 COMPATIBILITY
-This module implements Authorize.Net's API verison 3.0 using the ADC
+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.
Jason Kohles, jason@mediabang.com
Ivan Kohler <ivan-authorizenet@420.am> updated it for Authorize.Net protocol
-3.0 and is the current maintainer.
+3.0/3.1 and is the current maintainer.
-Jason Spence <jspence@lightconsulting.com> got settlements working and
-wrote some docs. OST <services@ostel.com> paid for it.
+Jason Spence <jspence@lightconsulting.com> contributed support for separate
+Authorization Only and Post Authorization steps and wrote some docs.
+OST <services@ostel.com> paid for it.
=head1 SEE ALSO