X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=AuthorizeNet.pm;h=b8d6c4dc45057d3617cfc2db6658dbe20e2e1fd1;hb=8bad888bb21187ddb50bda55961f7c29acdb359d;hp=2c2c85cd3e158685b77137f187e76a581d13982d;hpb=d70b814f88d5d851f09c9cf45ec804156b3fa8f7;p=Business-OnlinePayment-AuthorizeNet.git diff --git a/AuthorizeNet.pm b/AuthorizeNet.pm index 2c2c85c..b8d6c4d 100644 --- a/AuthorizeNet.pm +++ b/AuthorizeNet.pm @@ -1,6 +1,6 @@ package Business::OnlinePayment::AuthorizeNet; -# $Id: AuthorizeNet.pm,v 1.4 2002-02-12 23:29:43 ivan Exp $ +# $Id: AuthorizeNet.pm,v 1.7 2002-04-23 01:34:54 ivan Exp $ use strict; use Business::OnlinePayment; @@ -13,7 +13,7 @@ require Exporter; @ISA = qw(Exporter AutoLoader Business::OnlinePayment); @EXPORT = qw(); @EXPORT_OK = qw(); -$VERSION = '3.02'; +$VERSION = '3.11'; sub set_defaults { my $self = shift; @@ -21,6 +21,8 @@ sub set_defaults { $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 { @@ -98,6 +100,7 @@ sub submit { fax => 'x_Fax', email => 'x_Email', company => 'x_Company', + order_number => 'x_Trans_ID', ); if($self->transaction_type() eq "ECHECK") { @@ -105,8 +108,13 @@ sub submit { 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()); @@ -120,11 +128,11 @@ 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_Company x_Country x_Trans_ID/); $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(); @@ -141,10 +149,20 @@ sub submit { $self->is_success(1); $self->result_code($col[0]); $self->authorization($col[4]); + $self->order_number($col[6]); } else { $self->is_success(0); $self->result_code($col[2]); $self->error_message($col[3]); + unless ( $self->result_code() ) { #additional logging information + $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)" + ); + } } } @@ -176,7 +194,7 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin state => 'UT', zip => '84058', card_number => '4007000000027', - expiration => '09/99', + expiration => '09/02', ); $tx->submit(); @@ -202,20 +220,41 @@ For detailed information see L. =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 +'Authorization Only'), submit the nine-digit transaction id code in +the field "order_number" with the action set to "Post Authorization". +You can get the transaction id from the authorization by calling the +order_number method on the object returned from the authorization. +You must also submit the amount field with a value less than or equal +to the amount specified in the original authorization. + +Recently (February 2002), Authorize.Net has turned address +verification on by default for all merchants. If you do not have +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 address information. + =head1 COMPATIBILITY -This module implements Authorize.Net's API verison 3.0. +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. =head1 AUTHOR Jason Kohles, jason@mediabang.com Ivan Kohler updated it for Authorize.Net protocol -3.0 and is the current maintainer. +3.0/3.1 and is the current maintainer. + +Jason Spence contributed support for separate +Authorization Only and Post Authorization steps and wrote some docs. +OST paid for it. =head1 SEE ALSO