From 1afbfc2928204a7ed8d8775456b4b71c5a9d7795 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 29 Jul 2003 14:52:50 +0000 Subject: [PATCH] From Daemon Hughes : - add "transaction key" (x_Tran_Key) authentication in addition to password - add "recurring_billing" field - added "md5" method --- AuthorizeNet.pm | 37 +++++++++++++++++++++++-------------- Changes | 9 ++++++++- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/AuthorizeNet.pm b/AuthorizeNet.pm index 9ed5082..9da8850 100644 --- a/AuthorizeNet.pm +++ b/AuthorizeNet.pm @@ -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 field in the transaction content. @@ -309,6 +314,10 @@ Yuri V. Mkrtumyan sent in a patch to add the void action. Paul Zimmer sent in a patch for card-less post authorizations. +Daemmon Hughes 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. diff --git a/Changes b/Changes index ffe9320..054bc76 100644 --- 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 - allow "Post Authorize" with order_number but no card info, patch + - added 'void' action, patch from Yuri V. Mkrtumyan + + - allow "Post Authorize" with order_number but no card info, patch from Paul Zimmer - Don't require "check_type" field - s/x_Bank_Account_Name/x_Bank_Acct_Name/ for ACH transactions + From Daemon Hughes : + - 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 -- 2.11.0