From f9ff63c36635a9cb6f70a51dda39faeb35b6530a Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 26 Jun 2004 07:47:35 +0000 Subject: [PATCH] add shop_ name/address fields, add cvv2/cavv responses --- AuthorizeNet.pm | 176 ++++++++++++++++++++++++++++++++++++++++++-------------- Changes | 9 +++ 2 files changed, 141 insertions(+), 44 deletions(-) diff --git a/AuthorizeNet.pm b/AuthorizeNet.pm index bd06915..d4ee829 100644 --- a/AuthorizeNet.pm +++ b/AuthorizeNet.pm @@ -12,7 +12,7 @@ require Exporter; @ISA = qw(Exporter AutoLoader Business::OnlinePayment); @EXPORT = qw(); @EXPORT_OK = qw(); -$VERSION = '3.13'; +$VERSION = '3.14'; sub set_defaults { my $self = shift; @@ -21,7 +21,9 @@ sub set_defaults { $self->port('443'); $self->path('/gateway/transact.dll'); - $self->build_subs(qw(order_number md5 avs_code)); + $self->build_subs(qw( order_number md5 avs_code cvv2_response + cavv_response + )); } sub map_fields { @@ -80,47 +82,58 @@ sub submit { $self->map_fields(); $self->remap_fields( - type => 'x_Method', - login => 'x_Login', - password => 'x_Password', - transaction_key => 'x_Tran_Key', - action => 'x_Type', - description => 'x_Description', - amount => 'x_Amount', - currency => 'x_Currency_Code', - invoice_number => 'x_Invoice_Num', - order_number => 'x_Trans_ID', - auth_code => 'x_Auth_Code', - customer_id => 'x_Cust_ID', - customer_ip => 'x_Customer_IP', - last_name => 'x_Last_Name', - first_name => 'x_First_Name', - address => 'x_Address', - city => 'x_City', - state => 'x_State', - zip => 'x_Zip', - country => 'x_Country', - phone => 'x_Phone', - fax => 'x_Fax', - email => 'x_Email', - company => 'x_Company', - card_number => 'x_Card_Num', - expiration => 'x_Exp_Date', - cvv2 => 'x_Card_Code', - check_type => 'x_Echeck_Type', - account_name => 'x_Bank_Acct_Name', - account_number => 'x_Bank_Acct_Num', - account_type => 'x_Bank_Acct_Type', - bank_name => 'x_Bank_Name', - routing_code => 'x_Bank_ABA_Code', - customer_org => 'x_Customer_Organization_Type', - customer_ssn => 'x_Customer_Tax_ID', - license_num => 'x_Drivers_License_Num', - license_state => 'x_Drivers_License_State', - license_dob => 'x_Drivers_License_DOB', - recurring_billing => 'x_Recurring_Billing', + type => 'x_Method', + login => 'x_Login', + password => 'x_Password', + transaction_key => 'x_Tran_Key', + action => 'x_Type', + description => 'x_Description', + amount => 'x_Amount', + currency => 'x_Currency_Code', + invoice_number => 'x_Invoice_Num', + order_number => 'x_Trans_ID', + auth_code => 'x_Auth_Code', + customer_id => 'x_Cust_ID', + customer_ip => 'x_Customer_IP', + last_name => 'x_Last_Name', + first_name => 'x_First_Name', + company => 'x_Company', + address => 'x_Address', + city => 'x_City', + state => 'x_State', + zip => 'x_Zip', + country => 'x_Country', + ship_last_name => 'x_Ship_To_Last_Name', + ship_first_name => 'x_Ship_To_First_Name', + ship_company => 'x_Company', + ship_address => 'x_Ship_To_Address', + ship_city => 'x_Ship_To_City', + ship_state => 'x_Ship_To_State', + ship_zip => 'x_Ship_To_Zip', + ship_country => 'x_Ship_To_Country', + phone => 'x_Phone', + fax => 'x_Fax', + email => 'x_Email', + card_number => 'x_Card_Num', + expiration => 'x_Exp_Date', + cvv2 => 'x_Card_Code', + check_type => 'x_Echeck_Type', + account_name => 'x_Bank_Acct_Name', + account_number => 'x_Bank_Acct_Num', + account_type => 'x_Bank_Acct_Type', + bank_name => 'x_Bank_Name', + routing_code => 'x_Bank_ABA_Code', + customer_org => 'x_Customer_Organization_Type', + customer_ssn => 'x_Customer_Tax_ID', + 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'; + + my $auth_type = $self->{_content}->{transaction_key} + ? 'transaction_key' + : 'password'; if ($self->transaction_type() eq "ECHECK") { if ($self->{_content}->{customer_org} ne '') { @@ -159,8 +172,13 @@ sub submit { x_Bank_Account_Name x_Bank_ABA_Code x_Bank_Name x_Bank_Acct_Type x_Customer_Organization_Type x_Customer_Tax_ID x_Customer_IP x_Drivers_License_Num x_Drivers_License_State x_Drivers_License_DOB - 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_Last_Name x_First_Name x_Company + x_Address x_City x_State x_Zip + x_Country + x_Ship_To_Last_Name x_Ship_To_First_Name x_Ship_To_Company + x_Ship_To_Address x_Ship_To_City x_Ship_To_State x_Ship_To_Zip + x_Ship_To_Country + x_Phone x_Fax x_Email x_Email_Customer x_Country x_Currency_Code x_Trans_ID/); $post_data{'x_Test_Request'} = $self->test_transaction()?"TRUE":"FALSE"; $post_data{'x_ADC_Delim_Data'} = 'TRUE'; @@ -184,6 +202,9 @@ sub submit { $self->avs_code($col[5]); $self->order_number($col[6]); $self->md5($col[37]); + $self->cvv2_response($col[38]); + $self->cavv_response($col[39]); + if($col[0] eq "1" ) { # Authorized/Pending/Test $self->is_success(1); $self->result_code($col[0]); @@ -216,6 +237,10 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin use Business::OnlinePayment; + #### + # One step transaction, the simple case. + #### + my $tx = new Business::OnlinePayment("AuthorizeNet"); $tx->content( type => 'VISA', @@ -245,6 +270,69 @@ Business::OnlinePayment::AuthorizeNet - AuthorizeNet backend for Business::Onlin print "Card was rejected: ".$tx->error_message."\n"; } + #### + # Two step transaction, authorization and capture. + # If you don't need to review order before capture, you can + # process in one step as above. + #### + + my $tx = new Business::OnlinePayment("AuthorizeNet"); + $tx->content( + type => 'VISA', + login => 'testdrive', + password => '', + action => 'Authorization Only', + description => 'Business::OnlinePayment test', + amount => '49.95', + invoice_number => '100100', + customer_id => 'jsk', + first_name => 'Jason', + last_name => 'Kohles', + address => '123 Anystreet', + city => 'Anywhere', + state => 'UT', + zip => '84058', + card_number => '4007000000027', + expiration => '09/02', + cvv2 => '1234', #optional + referer => 'http://valid.referer.url/', + ); + $tx->submit(); + + if($tx->is_success()) { + # get information about authorization + $authorization = $tx->authorization + $ordernum = $tx->order_number; + $avs_code = $tx->avs_code; # AVS Response Code + $cvv2_response = $tx->cvv2_response; # CVV2/CVC2/CID Response Code + $cavv_response = $tx->cavv_response; # Cardholder Authentication + # Verification Value (CAVV) Response + # Code + + # now capture transaction + my $capture = new Business::OnlinePayment("AuthorizeNet"); + + $capture->content( + type => 'CC', + action => 'Post Authorization', + login => 'YOURLOGIN + password => 'YOURPASSWORD', + order_number => $ordernum, + amount => '49.95', + ); + + $capture->submit(); + + if($capture->is_success()) { + print "Card captured successfully: ".$capture->authorization."\n"; + } else { + print "Card was rejected: ".$capture->error_message."\n"; + } + + } else { + print "Card was rejected: ".$tx->error_message."\n"; + } + =head1 SUPPORTED TRANSACTION TYPES =head2 Visa, MasterCard, American Express, Discover diff --git a/Changes b/Changes index 3342b07..552093a 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,14 @@ Revision history for Perl extension Business::OnlinePayment::AuthorizeNet. +3.14 unreleased + - Added ship_ name/address fields + From T.J. Mather (closes: cpan#6761): + - Added cvv2_response and cavv_response to get the cvv2 and cavv + response codes back from authorize.net. + - Added example of how to capture a transaction to the synopsis. + - Added example of how to get the avs_code, cvv2_response, and + cavv_response from the response + 3.13 Sun Aug 10 21:56:34 PDT 2003 - removed Michael Mavroudis's email address - added 'void' action, patch from Yuri V. Mkrtumyan -- 2.11.0