fix paymentech batch approval status processing, RT#80622
[freeside.git] / FS / FS / pay_batch / paymentech.pm
index 91abbf2..094d501 100644 (file)
@@ -8,7 +8,7 @@ use Date::Format 'time2str';
 use Date::Parse 'str2time';
 use Tie::IxHash;
 use FS::Conf;
-use FS::Misc 'bytes_substr';
+use Unicode::Truncate 'truncate_egc';
 
 my $conf;
 my ($bin, $merchantID, $terminalID, $username, $password, $with_recurringInd);
@@ -67,12 +67,8 @@ my $gateway;
         $hash->{'error_message'} = $hash->{'procStatusMessage'};
       }
     },
-  'approved'    => sub { my $hash = shift;
-                            $hash->{'approvalStatus'} 
-    },
-  'declined'    => sub { my $hash = shift;
-                            ! $hash->{'approvalStatus'} 
-    },
+  'approved'    => sub { shift->{'approvalStatus'} == 1 },
+  'declined'    => sub { shift->{'approvalStatus'} != 1 },
 );
 
 my %paytype = (
@@ -128,15 +124,17 @@ my %paymentech_countries = map { $_ => 1 } qw( US CA GB UK );
         ) : (
           ecpCheckRT      => ($_->payinfo =~ /@(\d+)/),
           ecpCheckDDA     => ($_->payinfo =~ /(\d+)@/),
-          ecpBankAcctType => $paytype{lc($_->cust_main->paytype)},
+          ecpBankAcctType => $paytype{lc($_->paytype)},
           ecpDelvMethod   => 'A',
         ),
-        avsZip          => bytes_substr($_->zip,      0, 10),
-        avsAddress1     => bytes_substr($_->address1, 0, 30),
-        avsAddress2     => bytes_substr($_->address2, 0, 30),
-        avsCity         => bytes_substr($_->city,     0, 20),
-        avsState        => bytes_substr($_->state,    0, 2),
-        avsName         => bytes_substr($_->first. ' '. $_->last, 0, 30),
+                           # truncate_egc will die() on empty string
+        avsZip      => $_->zip      ? truncate_egc($_->zip,      10) : undef,
+        avsAddress1 => $_->address1 ? truncate_egc($_->address1, 30) : undef,
+        avsAddress2 => $_->address2 ? truncate_egc($_->address2, 30) : undef,
+        avsCity     => $_->city     ? truncate_egc($_->city,     20) : undef,
+        avsState    => $_->state    ? truncate_egc($_->state,     2) : undef,
+        avsName     => ($_->first || $_->last)
+                       ? truncate_egc($_->first. ' '. $_->last, 30) : undef,
         ( $paymentech_countries{ $_->country }
           ? ( avsCountryCode  => $_->country )
           : ()
@@ -175,7 +173,14 @@ sub _upgrade_gateway {
   my $conf = FS::Conf->new;
   my @batchconfig = $conf->config('batchconfig-paymentech');
   my %options;
-  @options{ qw(bin terminalID merchantID login password ) } = @batchconfig;
+  @options{ qw(
+    bin
+    terminalID
+    merchantID
+    login
+    password
+    with_recurringInd
+  ) } = @batchconfig;
   $options{'industryType'} = 'EC';
   ( 'Paymentech', %options );
 }