failure_status support; better handling of error messages
authorMark Wells <mark@freeside.biz>
Thu, 15 Aug 2013 17:57:58 +0000 (10:57 -0700)
committerMark Wells <mark@freeside.biz>
Fri, 16 Aug 2013 00:18:04 +0000 (17:18 -0700)
Paymentech.pm

index e505c0f..19277cc 100644 (file)
@@ -240,13 +240,47 @@ sub parse_item {
     second  => $sec,
   );
 
+  my %failure_status = (
+    # API version 2.6, April 2013
+    '00'  => undef,       # Approved
+    '04'  => 'pickup',
+    '33'  => 'expired',
+    '41'  => 'stolen',
+    '42'  => 'inactive',
+    '43'  => 'stolen',
+    '44'  => 'inactive',
+    'B7'  => 'blacklisted', # Fraud
+    'B9'  => 'blacklisted', # On Negative File
+    'BB'  => 'stolen',      # Possible Compromise
+    'BG'  => 'blacklisted', # Blocked Account
+    'BQ'  => 'blacklisted', # Issuer has Flagged Account as Suspected Fraud
+    'C4'  => 'nsf',         # Over Credit Limit
+    'D5'  => 'blacklisted', # On Negative File
+    'D7'  => 'nsf',         # Insufficient Funds
+    'F3'  => 'inactive',    # Account Closed
+    'K6'  => 'nsf',         # NSF
+  ); # all others are "decline"
+
+  my $failure_status = undef;
+  my $error_message;
+
+  if ( $resp->{procStatus} ) {
+    $error_message = $resp->{procStatusMessage};
+  } elsif ( $resp->{respCode} ) {
+    $error_message = $resp->{respCodeMessage};
+    $failure_status = $failure_status{ $resp->{respCode} } || 'decline';
+  } else {
+    $error_message = '';
+  }
+
   my $item = Business::BatchPayment->create(Item =>
     tid           => $resp->{orderID},
     process_date  => $dt,
     authorization => $resp->{authorizationCode},
     order_number  => $resp->{txRefNum},
     approved      => ($resp->{approvalStatus} == 1),
-    error_message => $resp->{procStatusMessage},
+    error_message => $error_message,
+    failure_status  => $failure_status,
   );
   $item;
 }