From Daemon Hughes <daemmon@daemmonhughes.com>:
authorivan <ivan>
Tue, 29 Jul 2003 14:52:50 +0000 (14:52 +0000)
committerivan <ivan>
Tue, 29 Jul 2003 14:52:50 +0000 (14:52 +0000)
        - add "transaction key" (x_Tran_Key) authentication in addition to
          password
        - add "recurring_billing" field
        - added "md5" method

AuthorizeNet.pm
Changes

index 9ed5082..9da8850 100644 (file)
@@ -22,6 +22,7 @@ sub set_defaults {
     $self->path('/gateway/transact.dll');
 
     $self->build_subs('order_number'); #no idea how it worked for jason w/o this
+    $self->build_subs('md5');
 }
 
 sub map_fields {
@@ -83,6 +84,7 @@ sub submit {
         type           => 'x_Method',
         login          => 'x_Login',
         password       => 'x_Password',
+        transaction_key       => 'x_Tran_Key',
         action         => 'x_Type',
         description    => 'x_Description',
         amount         => 'x_Amount',
@@ -117,40 +119,42 @@ sub submit {
         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 password amount routing_code
+            $self->required_fields(qw/type login amount routing_code
                                   account_number account_type bank_name
                                   account_name account_type
-                                  customer_org customer_ssn/);
+                                  customer_org customer_ssn/, $auth_type);
         } else {
-            $self->required_fields(qw/type login password amount routing_code
+            $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/);
+                                  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 password action amount/);
+              $self->required_fields(qw/type login action amount/, $auth_type);
           } else {
-              $self->required_fields(qw/type login password action amount 
-                                        card_number expiration/);
+              $self->required_fields(qw/type login action amount 
+                                        card_number expiration/, $auth_type);
           }
       } elsif ( $self->{_content}->{action} eq 'VOID' ) {
-        $self->required_fields(qw/login password action/);
+        $self->required_fields(qw/login action/,$auth_type);
       } else {
-        $self->required_fields(qw/type login password action amount last_name
-                                  first_name card_number expiration/);
+        $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_Invoice_Num
+    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
@@ -178,6 +182,7 @@ sub submit {
     my @col = $csv->fields();
 
     $self->server_response($page);
+    $self->md5($col[37]);
     if($col[0] eq "1" ) { # Authorized/Pending/Test
         $self->is_success(1);
         $self->result_code($col[0]);
@@ -244,11 +249,11 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin
 
 =head2 Visa, MasterCard, American Express, Discover
 
-Content required: type, login, password, action, amount, first_name, last_name, card_number, expiration.
+Content required: type, login, password|transaction_key, action, amount, first_name, last_name, card_number, expiration.
 
 =head2 Check
 
-Content required: type, login, password, action, amount, first_name, last_name, account_number, routing_code, bank_name.
+Content required: type, login, password|transaction_key, action, amount, first_name, last_name, account_number, routing_code, bank_name.
 
 =head1 DESCRIPTION
 
@@ -262,7 +267,7 @@ last_name fields.
 
 Business::OnlinePayment::AuthorizeNet uses Authorize.Net's "Advanced
 Integration Method (AIM) (formerly known as ADC direct response)", sending a
-username and password with every transaction.  Therefore, Authorize.Net's
+username and transaction_key or 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.
@@ -309,6 +314,10 @@ Yuri V. Mkrtumyan <yuramk@novosoft.ru> sent in a patch to add the void action.
 Paul Zimmer <AuthorizeNetpm@pzimmer.box.bepress.com> sent in a patch for
 card-less post authorizations.
 
+Daemmon Hughes <daemmon@daemmonhughes.com> sent in a patch for "transaction
+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.
+
 =head1 SEE ALSO
 
 perl(1). L<Business::OnlinePayment>.
diff --git a/Changes b/Changes
index ffe9320..054bc76 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,10 +2,17 @@ Revision history for Perl extension Business::OnlinePayment::AuthorizeNet.
 
 3.13  unreleased
        - removed Michael Mavroudis's email address
-       - added 'void' action, patch from Yuri V. Mkrtumyan <yuramk@novosoft.ru>        - allow "Post Authorize" with order_number but no card info, patch
+       - added 'void' action, patch from Yuri V. Mkrtumyan
+         <yuramk@novosoft.ru>
+       - allow "Post Authorize" with order_number but no card info, patch
          from Paul Zimmer <AuthorizeNetpm@pzimmer.box.bepress.com>
        - Don't require "check_type" field
        - s/x_Bank_Account_Name/x_Bank_Acct_Name/ for ACH transactions
+       From Daemon Hughes <daemmon@daemmonhughes.com>:
+       - add "transaction key" (x_Tran_Key) authentication in addition to
+         password
+       - add "recurring_billing" field
+       - added "md5" method
 
 3.12  Thu Nov 21 17:05:19 2002
        - Added cvv2 field, patch from T.J. Mather <tjmather@maxmind.com>