Added documentation about referrer field at Authorize.Net
[Business-OnlinePayment-AuthorizeNet.git] / AuthorizeNet.pm
index 38d00ae..40c01d9 100644 (file)
@@ -1,10 +1,11 @@
 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);
 
@@ -13,7 +14,7 @@ require Exporter;
 @ISA = qw(Exporter AutoLoader Business::OnlinePayment);
 @EXPORT = qw();
 @EXPORT_OK = qw();
-$VERSION = '3.11';
+$VERSION = '3.12';
 
 sub set_defaults {
     my $self = shift;
@@ -48,6 +49,10 @@ sub map_fields {
     $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);
 }
@@ -101,6 +106,8 @@ sub submit {
         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") {
@@ -128,7 +135,8 @@ sub submit {
                                          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';
@@ -138,7 +146,10 @@ sub submit {
     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);
@@ -155,6 +166,7 @@ sub submit {
         $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) ".
@@ -195,6 +207,8 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin
       zip            => '84058',
       card_number    => '4007000000027',
       expiration     => '09/02',
+      cvv2           => '1234', #optional
+      referer        => 'http://valid.referer.url/',
   );
   $tx->submit();
 
@@ -224,6 +238,13 @@ Unlike Business::OnlinePayment or pre-3.0 verisons of
 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".
@@ -256,6 +277,10 @@ 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.
 
+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>.