[interchange] Update Cardsave payment module to 0.9.8.

Stefan Hornburg interchange-cvs at icdevgroup.org
Sat Aug 3 06:50:17 UTC 2013


commit b58d67ae963087b4557f0903fbbe8b287be12208
Author: Lyn St George <lyn at zolotek.net>
Date:   Sat Aug 3 08:48:12 2013 +0200

    Update Cardsave payment module to 0.9.8.

 lib/Vend/Payment/Cardsave.pm |   44 +++++++++++++++++++++++++----------------
 1 files changed, 27 insertions(+), 17 deletions(-)
---
diff --git a/lib/Vend/Payment/Cardsave.pm b/lib/Vend/Payment/Cardsave.pm
index 4ecf980..2a58693 100644
--- a/lib/Vend/Payment/Cardsave.pm
+++ b/lib/Vend/Payment/Cardsave.pm
@@ -197,7 +197,13 @@ A possible block of code in a virtual terminal would be this:
 
 
 =head1 Changelog
-v0.9.7, February 2013, various updates during 3 months of heavy live use.
+090: release candidate
+
+098: following the split of LloydsTSB into two separate banks and the issue of new cards,
+apparently using Royal Bank of Scotland BIN ranges, Cardsave are returning the issuer for
+these cards only as a string whereas all other issuers are returned as a hash, contrary
+to their API. This update handles that situation. 
+
 
 =head1 AUTHORS
 
@@ -225,7 +231,7 @@ BEGIN {
 		die $msg;
 	}
 
-	::logGlobal("%s v0.9.6p 20130201 payment module loaded",__PACKAGE__)
+	::logGlobal("%s v0.9.8 20130730 payment module loaded",__PACKAGE__)
 		unless $Vend::Quiet or ! $Global::VendRoot;
 }
 
@@ -236,7 +242,7 @@ use strict;
   my ($host, $host1, $host2, $host3, $host4);
 
 sub cardsave {
-    my ($method, $response, $in, $opt, $actual, %result, $passoutdata, $orderdescription, $db, $dbh, $sth);
+    my ($response, $in, $opt, $actual, %result, $passoutdata, $orderdescription, $db, $dbh, $sth);
     my $subtotal = Vend::Interpolate::subtotal();
 #::logDebug("TDSbounced=$::Scratch->{tdsbounced}; subtotal=$subtotal");
     return if ($::Scratch->{'tdsbounced'} > '1');
@@ -276,7 +282,7 @@ sub cardsave {
 	   $host1   = charge_param('host1') || 'https://gw1.cardsaveonlinepayments.com:4430';   
 	   $host2   = charge_param('host2') || 'https://gw2.cardsaveonlinepayments.com:4430';   
 	   $host3   = charge_param('host3') || 'https://gw3.cardsaveonlinepayments.com:4430';   
-	   $host4   = charge_param('host4') || 'https://gw4.cardsaveonlinepayments.com:4430'; ### NB TESTING only; does not exist
+	   $host4   = charge_param('host4') || 'https://gw4.cardsaveonlinepayments.com:4430'; ### NB testing only  
 	   
 	my $address1 = $::Values->{'b_address1'} || $::Values->{'address1'};
 	my $address2 = $::Values->{'b_address2'} || $::Values->{'address2'};
@@ -311,7 +317,8 @@ sub cardsave {
 	   $actual->{'mv_credit_card_exp_year'}     =~ s/\D//g;
 	   $actual->{'mv_credit_card_exp_year'}     =~ s/\d\d(\d\d)/$1/;
 	my $cardref  = $pan;
-	   $cardref  =~ s/^(\d\d).*(\d\d\d\d)$/$1****$2/;
+	   $cardref  =~ s/^(\d\d\d\d).*(\d\d\d\d)$/$1****$2/;
+	   $::Session->{'CardRef'} = $cardref;
 	   
 	my $cardholder         = "$actual->{b_fname} $actual->{b_lname}" || "$actual->{fname} $actual->{lname}";
 	   $cardholder         =~ s/[^a-zA-Z0-9,.\- ]//gi;
@@ -339,7 +346,7 @@ sub cardsave {
 
 #::logDebug("Cardsave".__LINE__.": on=$::Values->{mv_order_number}; valtxtype=$::Values->{txtype};  pan=$pan; cardholder=$cardholder; expm=$mvccexpmonth; expy=$mvccexpyear; issue=$issuenumber; cv2=$cv2; address=$address");
 
-	my $echocardtype = charge_param('echocardtype') || 'TRUE';
+my $echocardtype = charge_param('echocardtype') || 'TRUE';
 	my $echoavscheckresult = charge_param('echoavscheckresult') || 'TRUE';
 	my $echocv2checkresult = charge_param('echocv2checkresult') || 'TRUE';
 	my $echoamountreceived = charge_param('echoamountreceived') || 'TRUE';
@@ -470,10 +477,11 @@ EOX
 	my $card = getcardtypeCardsave($pan, $username, $password);
 	  
 	   $::Session->{'CardType'} = $result{'CardType'} = $card->{'CardType'} if $card->{'CardType'};
-	   $::Session->{'CardIssuer'} = $result{'CardIssuer'} = $card->{'Issuer'}->{'content'} if $card->{'Issuer'}->{'content'};
-	   $::Session->{'CardIssuerCode'} = $result{'CardIssuerCode'} = $card->{'Issuer'}->{'ISOCode'} if $card->{'Issuer'}->{'ISOCode'};
+	   $::Session->{'CardIssuer'} = $result{'CardIssuer'} = $card->{'Issuer'}->{'content'} if $card->{'Issuer'} =~ /HASH/;
+	   $::Session->{'CardIssuer'} = $result{'CardIssuer'} = $card->{'Issuer'} if $card->{'Issuer'} !~ /HASH/;
+	   $::Session->{'CardIssuerCode'} = $result{'CardIssuerCode'} = $card->{'Issuer'}->{'ISOCode'} if $card->{'Issuer'} =~ /HASH/;
 	   $::Session->{'CardInfo'} = "$result{'CardType'}, $::Session->{'CardRef'}, $expshow" if $card->{'CardType'};
-#::logDebug("Cardsave".__LINE__.": xmlOut=$xmlOut\ncardinfo=$::Session->{CardInfo}; issuer=$::Session->{CardIssuer}");	 
+###::logDebug("Cardsave".__LINE__.": xmlOut=$xmlOut\ncardinfo=$::Session->{CardInfo}; issuer=$::Session->{CardIssuer}");	 
 #::logDebug("Cardsave".__LINE__.": card-xmlback=".::uneval($card));
 
 	my $msg = postCardsave($xmlOut);
@@ -486,7 +494,7 @@ EOX
 	   $result{'TDScheck'} = $data->{'TransactionOutputData'}->{'ThreeDSecureAuthenticationCheckResult'};
 	   $result{'MD'}       = $data->{'TransactionOutputData'}->{'CrossReference'};
 	   $result{'CardType'} = $data->{'TransactionOutputData'}->{'CardTypeData'}->{'CardType'};
-	   $result{'Issuer'}   = $data->{'TransactionOutputData'}->{'CardTypeData'}->{'Issuer'}->{'content'};
+###	   $result{'Issuer'}   = $data->{'TransactionOutputData'}->{'CardTypeData'}->{'Issuer'}->{'content'};
 	   $result{'StatusCode'}  = $data->{'CardDetailsTransactionResult'}->{'StatusCode'};
 	   $result{'AuthAttempt'} = $data->{'CardDetailsTransactionResult'}->{'AuthorisationAttempted'};
 	   $result{'TDSmessage'}  = $data->{'CardDetailsTransactionResult'}->{'Message'};
@@ -510,7 +518,7 @@ EOX
 			}
 	  }
 
-#::logDebug("Cardsave".__LINE__.": issuer=$result{Issuer}; type=$result{CardType}; errors = $::Session->{'errors'}{'Payment error'}");
+#::logDebug("Cardsave".__LINE__.": type=$result{CardType}; errors = $::Session->{'errors'}{'Payment error'}");
 
 #::logDebug("Cardsave".__LINE__.": authcode=$result{TxAuthNo}, cardref=$result{CardRef}; cardinfo=$result{CardInfo}; xref-md=$result{MD}; stcode=$result{statuscode}; TDSattmp=$result{AuthAttempt}; TDSmsg=$result{TDSmessage}");
 
@@ -622,7 +630,7 @@ EOX
 	       $result{'CardType'} = $::Session->{'CardType'};
 		   $result{'CardInfo'} = $::Session->{'CardInfo'};
 		   $result{'CardRef'}  = $::Session->{'CardRef'};
-		   $result{'CardIssuer'} = $::Session->{'CardIssuer'};
+###		   $result{'CardIssuer'} = $::Session->{'CardIssuer'};
 		   $result{'CardIssuerCode'} = $::Session->{'CardIssuerCode'};
 		   $::Scratch->{'mstatus'} = 'success';
 		   $::Scratch->{'order_id'} = $result{'order-id'};
@@ -798,7 +806,7 @@ Logged Error: $result{'TDSmessage'}\n"
 				 });
 #::logDebug("Cardsave".__LINE__.": txn error of \"$result{TDSmessage}\" emailed to $mailto"); 
 	}
-
+	
 #::logDebug("Cardsave".__LINE__." result:" .::uneval(\%result));
 
 		return (%result);
@@ -815,8 +823,8 @@ sub postCardsave {
 	 my $self = shift;
 	 my $ua = LWP::UserAgent->new;
 	    $ua->timeout(30);
-#	 my $gw = $::Session->{'CardsaveHost'} || $host2;
-	 my $gw = $host4;
+	 my $gw = $::Session->{'CardsaveHost'} || $host3;
+#	 my $gw = $host4; # TESTING - this does not exist
 	 my $req = HTTP::Request->new('POST' => $gw);
 		$req->content_type('text/xml');
 		$req->content_length( length($self) );
@@ -884,12 +892,14 @@ sub getcardtypeCardsave {
 </soap:Body>
 </soap:Envelope>
 EOX
-#::logDebug("Cardsave".__LINE__.": username=$username;");
+#::logDebug("\n===============================Cardsave".__LINE__.": cardtype xmlout=$xmlOut");
 my $msg = postCardsave($xmlOut);
 	my $xml = new XML::Simple();
 	my $data = $xml->XMLin("$msg");
+#::logDebug("Cardsave".__LINE__.": cardref=$::Session->{CardRef}");
+#::logDebug("Cardsave".__LINE__.": cardref=$::Session->{CardRef} : uneval cardtype=".::uneval($data));
 	   $data = $data->{'soap:Body'}->{'GetCardTypeResponse'}->{'GetCardTypeOutputData'}->{'CardTypeData'};
-
+#::logDebug("Cardsave".__LINE__.": card type data=$data\n===================================================\n");
 		return($data);
 
 }



More information about the interchange-cvs mailing list