package Business::OnlinePayment::AuthorizeNet;
-# $Id: AuthorizeNet.pm,v 1.8 2002-04-23 01:38:59 ivan Exp $
+# $Id: AuthorizeNet.pm,v 1.14 2002-08-16 06:53:28 ivan Exp $
use strict;
+use Carp;
use Business::OnlinePayment;
-use Net::SSLeay qw/make_form post_https/;
+use Net::SSLeay qw/make_form post_https make_headers/;
use Text::CSV_XS;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
@ISA = qw(Exporter AutoLoader Business::OnlinePayment);
@EXPORT = qw();
@EXPORT_OK = qw();
-$VERSION = '3.11';
+$VERSION = '3.12';
sub set_defaults {
my $self = shift;
$content{'type'} = $types{lc($content{'type'})} || $content{'type'};
$self->transaction_type($content{'type'});
+ $content{'referer'} = defined( $content{'referer'} )
+ ? make_headers( 'Referer' => $content{'referer'} )
+ : "";
+
# stuff it back into %content
$self->content(%content);
}
email => 'x_Email',
company => 'x_Company',
order_number => 'x_Trans_ID',
+ cvv2 => 'x_Card_Code',
+ currency => 'x_Currency_Code',
);
if($self->transaction_type() eq "ECHECK") {
x_Last_Name x_First_Name x_Address
x_City x_State x_Zip x_Country x_Phone
x_Fax x_Email x_Email_Customer
- x_Company x_Country x_Trans_ID/);
+ x_Company x_Country x_Trans_ID
+ x_Card_Code /);
$post_data{'x_Test_Request'} = $self->test_transaction()?"TRUE":"FALSE";
$post_data{'x_ADC_Delim_Data'} = 'TRUE';
$post_data{'x_ADC_URL'} = 'FALSE';
my $s = $self->server();
my $p = $self->port();
my $t = $self->path();
- my($page,$server_response,%headers) = post_https($s,$p,$t,'',$pd);
+ 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();
$csv->parse($page);
$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) ".
zip => '84058',
card_number => '4007000000027',
expiration => '09/02',
+ cvv2 => '1234', #optional
+ referer => 'http://valid.referer.url/',
);
$tx->submit();
Business::OnlinePayment::AuthorizeNet, 3.1 requires separate first_name and
last_name fields.
+Business::OnlinePayment::AuthorizeNet uses the ADC direct response method,
+and sends a username and password with every transaction. Therefore,
+Authorize.Net's referrer "security" is not necessary. In your Authorize.Net
+interface at https://secure.authorize.net/ make sure the list of allowable
+referers is blank. Alternatively, set the B<referer> field in the transaction
+content.
+
To settle an authorization-only transaction (where you set action to
'Authorization Only'), submit the nine-digit transaction id code in
the field "order_number" with the action set to "Post Authorization".
Authorization Only and Post Authorization steps and wrote some docs.
OST <services@ostel.com> paid for it.
+T.J. Mather <tjmather@maxmind.com> sent a patch for the CVV2 field.
+
+Mike Barry <mbarry@cos.com> sent in a patch for the referer field.
+
=head1 SEE ALSO
perl(1). L<Business::OnlinePayment>.